CMake目标链接库G ++标志与OSX Clang冲突

时间:2017-03-18 02:33:51

标签: linux macos gcc cmake clang

我正在尝试使用G ++和使用Clang的OSX上的C ++编译编写单个CMakeLists.txt文件。

我想将目标库标记-Wl,--start-group-Wl,--end-group与G ++一起使用,但在与Clang链接时会出现错误:ld: unknown option: --start-group

我能找到的唯一结果就是选择在Mac副本上删除这些标志,但这不允许从linux到OSX的简单项目迁移。我尝试将这些语句设置为CMAKE条件,但这些语句被视为未找到的文字库:

例如:$<IF($<NOT:APPLE>)> -Wl,--start-group $<ENDIF($<NOT:APPLE>)>

生成:c++: error: $<IF: No such file or directory

有没有办法在CMAKE TARGET_LINK_LIBRARIES字段中有条件地进行修改?

1 个答案:

答案 0 :(得分:0)

我试试这个:

if(${CMAKE_CXX_COMPILER_ID} STREQUAL "GNU")
    set(START_GROUP "-Wl,--start-group")
    set(END_GROUP "-Wl,--end-group")
else()
    set(START_GROUP "")
    set(END_GROUP "")
endif()

然后只需用$ {START_GROUP}和$ {END_GROUP}替换这些选项,它们只会与GNU编译器一起使用。

如果真正重要的编译器,请不要基于平台进行切换。否则,Linux上的Clang用户将无法构建您的项目。