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

ibps3vxo  于 2023-03-30  发布在  其他
关注(0)|答案(4)|浏览(173)

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

hmmo2u0o

hmmo2u0o1#

如果您询问如何将项目链接到预构建的静态库,您可以通过调用target_link_libraries来完成。
假设您的项目名为myProj,预构建库为myLib.lib,您可以这样做:

target_link_libraries(myProj myLib)
ctehm74n

ctehm74n2#

我有很大的困难,使这项工作,因为我是完全新的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})

你会注意到,在项目管理器窗口的“External Libraries”〉“Header Search Paths”下,包含你的头文件的目录出现了。
PS -Ken Martin和Bill Hoffmann的《Mastering CMake》一书是非常宝贵的资源。

cvxl0en2

cvxl0en23#

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

pxiryf3j

pxiryf3j4#

您的问题与CLion无关;它是纯CMake。从你的项目中修改CMakeLists.txt并使用add_libraryCMake documentation可能会有帮助。
我误解了这个问题target_link_library可能是这个问题的答案。

相关问题