CMake - 导入的库具有必须首先存在的库依赖性

时间:2018-06-08 00:22:46

标签: cmake mingw sdl-2

我是另一个傻瓜,试图通过“正确的方式”做事来试图做出体面的FindSDL2.cmake。但是,当涉及到以下问题时,我正在撞墙:

# SDL2main imported target.
add_library(SDL2::SDL2main UNKNOWN IMPORTED)
set_target_properties(SDL2::SDL2main PROPERTIES
                      IMPORTED_LOCATION "${SDL2_MAIN_LIBRARY}")

问题是,在使用MinGW进行编译时,SDL2main需要-lmingw32才能找到WinMain。并且必须在链接器标志中SDL2main之前。

似乎快乐的道路要我这样做:

if(MINGW)
    set_target_properties(SDL2::SDL2main PROPERTIES
                          INTERFACE_LINK_LIBRARIES mingw32)
endif()

但这不起作用,因为mingw32SDL2main之后的来自链接器命令。它必须在之前。我也不希望自己插入目标来加重目标。

1 个答案:

答案 0 :(得分:0)

好的,这让我有点想弄清楚 - 感谢ngladitz在#cmake IRC上做了一些澄清。

我最终采取了三步解决方法:

  1. 将SDL2main库设置为一个新的独立目标,在我的案例中称为SDL2::_SDL2main_detail
  2. 将此单独目标直接与SDL2::SDL2相关联。这很重要,否则CMake会混淆SDL2和SDL2main的链接顺序。
  3. 创建仅指向SDL2::SD2main的{​​{1}}目标,并链接到mingw32
  4. 这是我的代码:

    SDL2::_SDL2main_detail