【问题标题】:How to compile different source files with different options for a single target using CMake?如何使用 CMake 为单个目标编译具有不同选项的不同源文件?
【发布时间】:2017-05-21 21:20:54
【问题描述】:

我需要您的帮助,因为我是 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(),但我不知道如何将它用于我的案例?我想它可以为目标的全局标志设置,但不是为我所追求的!

【问题讨论】:

  • 我最终做的是为 A.c 创建另一个库目标,但传入 OBJECT 参数,如here 中所述,带有所需的选项和标志。对于实际目标,我可以使用add_executable(T B.cpp C.cpp $<TARGET_OBJECTS:A>)。因此,B 和 C 将使用另一个选项编译,然后将与 A.o 链接。

标签: gcc makefile compilation cmake


【解决方案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"
)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-21
    • 1970-01-01
    • 2011-03-09
    • 1970-01-01
    • 1970-01-01
    • 2013-06-08
    • 2013-08-13
    相关资源
    最近更新 更多