提问人:GrandJagon 提问时间:2/15/2023 最后编辑:GrandJagon 更新时间:2/15/2023 访问量:113
使用 CMake 构建和添加多个库 [重复]
Building and adding several libraries with CMake [duplicate]
问:
我是 CMake 新手,并试图在我的项目中使用它来学习它
该项目是一个小型游戏引擎,使用不同的外部库,如 GLFW、GLUT 和 SDL2。其中一些(例如 GL)位于我的 os include 目录中,而其中一些(例如 SDL)位于我的源代码树 (/vendors/SDL2) 中。
我正在尝试构建 SDL2 库,该库是一些头文件并将其链接到我的项目。
经过一番研究,我发现应该使用INTERFACE关键字,这就是我尝试的方式:
add_library(SDL2 INTERFACE)
target_include_directories(SDL2 INTERFACE vendors/SDL2)
在我的CMakeLists的末尾:
target_link_libraries(engine INTERFACE SDL2)
但是我遇到的问题是,我还有其他以传统方式构建的库(不使用interface关键字):
find_package(OpenGL REQUIRED)
find_package(glfw3 REQUIRED)
find_package(GLUT REQUIRED)
find_package(GLEW REQUIRED)
set(LIBS_DIR ${OPENGL_INCLUDE_DIRS} ${GLFW_INCLUDE_DIRS} ${GLUT_INCLUDE_DIRS} ${GLEW_INCLUDE_DIRS})
set(LIBS ${OPENGL_LIBRARIES} ${GLFW_LIBRARIES} ${GLUT_LIBRARIES} ${GLEW_LIBRARIES} SDL2 STB_IMAGE)
target_include_directories(
engine PUBLIC
${LIBS_DIR}
)
target_link_libraries(engine ${LIBS})
这样做,我最终会得到以下错误,我将其解释为每个项目只应使用target_link_libraries。
The plain signature for target_link_libraries has already been used with the target "engine". All uses of target_link_libraries with a target must be either all-keyword or all-plain.
我的问题是:如何将两种类型的库链接到我的项目?
我构建 SDL2 库的方式是否正确?我在网上看到过其他方法,但这个对我来说似乎是最简单的方法
多谢!
我还尝试将 SDL2 库添加到我的 LIBS 值中:
set(LIBS ${OPENGL_LIBRARIES} ${GLFW_LIBRARIES} ${GLUT_LIBRARIES} ${GLEW_LIBRARIES} SDL2 STB_IMAGE)
并在不使用关键字 INTERFACE 的情况下以正常方式链接它,但我收到未定义的引用链接器错误。事实上,我的引擎从 SDL2 库使用的方法似乎没有定义,所以我猜库没有正确排列。
答: 暂无答案
上一个:防止仅标头库依赖项的命名空间冲突
下一个:仅标头库作为模块?
评论