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

时间:2015-03-31 11:53:04

标签: cmake static-libraries clion

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

4 个答案:

答案 0 :(得分:14)

您可能会询问如何将项目链接到预构建的静态库。如果是这样,您可以通过拨打target_link_libraries来执行此操作。

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

target_link_libraries(myProj myLib)

答案 1 :(得分:1)

我对CLion和CMake完全陌生,因此很难完成这项工作。

在我的情况下,我上的课要求我们在每个项目中使用课程库。

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

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

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

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

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

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

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

现在,使用include_directories命令添加目录:

include_directories(${LIB_INCLUDES})

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

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

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

仅此而已。您会注意到,在“项目组织器”窗口的“外部库”>“标题搜索路径”下,将显示包含标题文件的目录。

PS-肯·马丁(Ken Martin)和比尔·霍夫曼(Bill Hoffmann)所著的《 << strong> CMake掌握CMake 》是一本宝贵的资源。

答案 2 :(得分:1)

我已将静态库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}),您可以打印并检查路径。

答案 3 :(得分:0)

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

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