CMake Target Link Library G++ Flags conflict with OSX Clang



我正在尝试编写一个CMakeLists.txt文件,用于在带有G++的Linux和带有Clang的OSX上进行C++编译。

我想在 G++ 中使用目标库标志-Wl,--start-group-Wl,--end-group,但是这些标志在与 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字段中进行有条件的编辑?

我会试试这个:

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 用户将无法构建您的项目。

最新更新