如何解决你如何在 CMake 中链接预编译库?
# file(COPY ${CMAKE_SOURCE_DIR}/libs/glew32.lib DESTINATION ${PROJECT_BINARY_DIR}/libs)
# file(COPY ${CMAKE_SOURCE_DIR}/libs/libglfw3dll.a DESTINATION ${PROJECT_BINARY_DIR}/libs)
add_executable(${PROJECT_NAME} main.cpp)
# libs/glew32.lib
# libs/libglfw3dll.a
# "main.cpp"
# )
target_link_libraries(${PROJECT_NAME}
libs/glew32.lib
libs/libglfw3dll.a
)
我在这里尝试了所有选项,但最终导致链接错误。我尝试从 src 编译并使用 glfw 和 glew 提供的所有可用格式。
解决方法
我通常首先创建一个 CMake 目标来导入预构建/预编译库,然后像通常链接到 CMake 库目标一样使用 target_link_libraries
。好处是您可以控制依赖项是 PRIVATE 依赖项还是 PUBLIC 依赖项。
project(YourCoolProject)
# Import a prebuilt library to a CMake target
add_library(Foo SHARED IMPORTED)
set_target_properties(Foo PROPERTIES
IMPORTED_LOCATION_DEBUG "/absolute-path/to/prebuilt-debug-library"
IMPORTED_LOCATION_RELEASE "/absolute-path/to/prebuilt-release-library"
IMPORTED_LOCATION_RELWITHDEBINFO "/absolute-path/to/prebuilt-relwithdebinfo-library"
INTERFACE_INCLUDE_DIRECTORIES "/absolute-path/to/include-dir"
)
add_executable(${PROJECT_NAME} main.cpp)
target_link_libraries(${PROJECT_NAME} PRIVATE Foo)
注意事项:
-
IMPORTED_LOCATION_<CONFIG>
的选择取决于您提供给 CMake 的构建类型 (cmake -DCMAKE_BUILD_TYPE=<CONFIG> ...
)。 - 为了替换绝对路径,您可以使用
find_library
来利用 CMake 查找您的库并将其存储在变量中,然后使用find_path
查找包含目录。
您可能还需要使用 target_link_directories()
来告诉编译器在哪里可以找到这些库:
target_link_directories(${PROJECT_NAME} ${PROJECT_BINARY_DIR}/libs/)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。