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

时间:2017-05-21 21:20:54

标签: gcc makefile compilation cmake

我希望你的帮助,因为我是一个新手,当涉及到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 个答案:

答案 0 :(得分: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"
)