如何使用CMake在项目中添加预建静态库?

How to add prebuilt static library in project using CMake?

Clion:如何在我的项目中添加或(使用)预建静态库?

您的问题与 CLion 无关,它是纯 CMake。修改项目中的 CMakeLists.txt 并使用 add_libraryCMake documentation 可能会有帮助。

我误解了问题,target_link_library可能是问题的答案。

您可能会问如何 link 您的项目到预构建的静态库。如果是这样,您可以通过调用 target_link_libraries.

来执行此操作

假设您的项目名为 myProj 和预建库 myLib.lib,您可以这样做:

target_link_libraries(myProj myLib)

由于我对 CLion 和 CMake 是全新的,所以我很难完成这项工作。

在我的场景中,我参加了一个 class 要求我们在每个项目中使用课程库的课程。

假设您有一个名为 libClassLibrary.a 的库,请在项目根目录的 CMakeLists.txt 中执行以下操作:

首先,找到图书馆的位置:

find_library(LIB_TO_INCLUDE ClassLibrary /path/to/your/library)

LIB_TO_INCLUDE 将包含库的位置(假设已找到)。请注意,如果您希望您的解决方案可移植到其他系统,则对路径进行硬编码可能会出现问题。如果库可能存在于多个位置,您可以添加由 space 分隔的其他搜索路径。一个典型的例子是包括常见的安装位置,例如 /usr/bin /usr/local/bin

接下来,确保 header 个文件(如果适用)包含在 header 个搜索路径中:

find_path (LIB_INCLUDES ClassLibrary.h /path/to/header/files)

同样,如果 header 可以加载到多个位置,请包括多个搜索路径。如果有多个 header 文件,您需要包含所有文件。

现在,使用 include_directories 命令包含目录:

include_directories(${LIB_INCLUDES})

以上内容将指示构建系统搜索 LIB_INCLUDES 中包含的所有目录或您决定调用它的任何内容。

最后,添加可执行文件并使用 target_link_libraries 命令到 link libClassLibrary.a

add_executable(MyExecutable main.cpp)
target_link_libraries(MyExecutable ${LIB_TO_INCLUDE})

就是这样。您会注意到,在项目管理器 window 的 "External Libraries" > "Header Search Paths" 下,出现了包含您的 header 文件的目录。

PS - Ken Martin 和 Bill Hoffmann 合着的 Mastering CMake 一书是非常宝贵的资源。

我已经将我的静态库 test.a 与相关的头文件链接如下:

Project
├── main.cpp
├── CmakeLists.txt
├── libs
│   ├── includes
│   │   ├── *.h
│   ├── lib
│   │   ├── test.a

我已将此添加到 ./CMakeLists.txt:

include_directories(${CMAKE_SOURCE_DIR}/libs/include)
find_library(Test_LIB test "${CMAKE_SOURCE_DIR}/libs/lib")
add_executable(TestApp main.cpp)
target_link_libraries(TestApp ${Test_LIB})

加上message(${Test_LIB}),可以打印出来查看路径