【问题标题】:CMake Target Link Library G++ Flags conflict with OSX ClangCMake 目标链接库 G++ 标志与 OSX Clang 冲突
【发布时间】:2023-03-04 02:39:01
【问题描述】:

我正在尝试编写一个 CMakeLists.txt 文件,用于在 Linux 上使用 G++ 和在 OSX 上使用 Clang 进行 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 字段中进行有条件的编辑?

【问题讨论】:

    标签: linux macos gcc cmake clang


    【解决方案1】:

    我会试试这个:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多