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

ilw*_*ilw 10 cmake static-libraries clion

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

her*_*tao 15

您可能会询问如何将项目链接到预构建的静态库.如果是这样,您可以通过致电来做到这一点target_link_libraries.

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

target_link_libraries(myProj myLib)
Run Code Online (Sandbox Code Playgroud)

  • @Andreyua那将只是`target_link_libraries(myProj /tmp/balabla/mylib.a)`.:) (4认同)
  • @herohuyongtao 我仍然收到以下错误`无法找到-llibusb1.0`哪里我的`target_link_libraries(native-lib libusb1.0)`错误你能帮我吗? (2认同)

小智 7

我在完成这项工作时遇到了很大的困难,因为我对 CLion 和 CMake 完全陌生。

在我的场景中,我正在上课,要求我们在每个项目中使用课程库。

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

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

find_library(LIB_TO_INCLUDE ClassLibrary /path/to/your/library)
Run Code Online (Sandbox Code Playgroud)

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

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

find_path (LIB_INCLUDES ClassLibrary.h /path/to/header/files)
Run Code Online (Sandbox Code Playgroud)

同样,如果标题可以在多个位置加载,则包括多个搜索路径。如果头文件不止一个,则需要包含所有头文件。

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

include_directories(${LIB_INCLUDES})
Run Code Online (Sandbox Code Playgroud)

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

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

add_executable(MyExecutable main.cpp)
target_link_libraries(MyExecutable ${LIB_TO_INCLUDE})
Run Code Online (Sandbox Code Playgroud)

就这样。您会注意到,在“项目管理器”窗口中的“外部库”>“头搜索路径”下,会出现包含头文件的目录。

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