我希望你的帮助,因为我是一个新手,当涉及到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()
,但我不知道如何使用它?我想它可以设置目标的全局标志,但不能用于我所追求的目标!
答案 0 :(得分:1)
如果要为各个源文件设置特定标志,则需要使用源文件属性。您可以使用set_property(SOURCE...)
或set_source_files_properties()
来执行此操作。您可能感兴趣的源属性是COMPILE_DEFINITIONS
和COMPILE_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"
)