2
# 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 提供的所有可用格式。

4

2 回答 2

3

我通常首先创建一个 CMake 目标来导入预构建/预编译的库,然后target_link_libraries像你通常那样使用链接到 CMake 库目标。好处是您可以将依赖项控制为 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)

笔记:

  1. 的选择IMPORTED_LOCATION_<CONFIG>取决于您提供给 CMake ( cmake -DCMAKE_BUILD_TYPE=<CONFIG> ...) 的构建类型。
  2. 为了替换绝对路径,您可以使用find_libraryCMake 来查找您的库并将其存储在一个变量中并用于find_path查找包含目录。
于 2021-06-08T14:31:27.717 回答
0

您可能还需要使用target_link_directories()来告诉编译器在哪里可以找到库:

target_link_directories(${PROJECT_NAME} ${PROJECT_BINARY_DIR}/libs/)
于 2021-06-08T14:23:38.363 回答