首页 文章

如何使用CMake为单个目标编译具有不同选项的不同源文件?

提问于
浏览
0

我想要你的帮助,因为我是一名新手,谈到CMake . 假设我有一个可执行目标T,它取决于源文件A.c,B.cpp和c.cpp . 我想用特定的标志编译A.c并创建目标文件A.o.为简单起见,我们假设B和C将使用g编译,并使用相同的标志集,并且相应的目标文件应创建为B.o C.o.然后我可以链接这些目标文件并使用gcc生成T.我知道我可以使用常规makefile在几个步骤中完成它 . 基本上,我无法使用特定标志编译A.c,其余文件使用相同的标志 . 我不知道用CMake应该怎么做?

add_executable(T A.c B.cpp C.cpp)

我知道CMake提供 target_compile_options() 但是我不知道怎么用它来做我的情况?我想它可以设置为目标的全局标志,但不是我追求的!

1 回答

  • 1

    如果要为各个源文件设置特定标志,则需要使用源文件属性 . 您可以使用set_property(SOURCE...)set_source_files_properties()来执行此操作 . 您可能感兴趣的源属性是COMPILE_DEFINITIONSCOMPILE_FLAGS . 例如:

    # set_source_files_properties() always replaces any previous value
    set_source_files_properties(A.c PROPERTIES
        COMPILE_DEFINITIONS MySpecialOption=1
    )
    
    # Only set_property() allows appending to existing values
    set_property(SOURCE A.c APPEND_STRING PROPERTY
        COMPILE_FLAGS " -Wno-unused"
    )
    

相关问题