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

#1楼 票数:17 已采纳

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

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

target_link_libraries(myProj myLib)

#2楼 票数:7

我在完成这项工作时遇到了很大的困难,因为我对 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 合着的Mastering CMake一书是非常宝贵的资源。

#3楼 票数:2

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

#4楼 票数:1

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

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

  ask by ilw translate from so

未解决问题?本站智能推荐:

1回复

c++生成静态库,然后将其与Clion/Cmake结合使用

我一直在网上搜索并尝试了几个小时才能使其正常工作。 但是我遇到了砖墙。 我有一小部分帮助程序类,这些类在整个项目中非常有用。 我想将它们放入静态库,以便可以将其包含在我从事的任何项目中。 我已经成功创建了一个文件libMyTestLibrary.a并将其放在我的/ usr / lib
2回复

CLion和CMake:仅构建没有可执行文件的库?

如何在没有可执行文件的情况下仅使用clion构建静态库? CMakeLists.txt 是什么样的? (没有add_executable ) 更新:如果我不向 Clion 添加可执行文件,则会出现一个错误,即需要一个可执行文件。 这是我的CMakeLists.txt 。
1回复

SDL2Cmake未定义对Win10MinGW上的“WinMain@16”的引用

我正在尝试使用 MinGW 在 CLion 中设置 SDL,但是我在错误之后出现错误,我无法想象我哪里出错了。 现在我有了这个 Cmake 代码,我得到了错误undefined reference to 'WinMain@16' 。 我想我忘记链接一些东西,可能是 SDLmain,但我想我在targ
3回复

无法在C程序中链接.a库文件

我正在学习Cmake,并将库项目添加到简单的C项目中。 我创建了一个具有以下结构的简单图书馆项目。 Cmakelist.txt生成一个我正在另一个C程序中使用的.a lib文件。 C程序的结构如下: libuntitled.a是我的库项目中CmakeList.txt生成的库文件。
1回复

在cmake项目中使用静态库

我有两个C ++项目A和B。项目B取决于项目A。项目A的结构分为几个子目录: 问题在于项目B无法解析项目A的定义。 尽管我已经在Project B中将target_link_libraries添加到CMakeLists.txt中,但还​​是出现了这样的错误: 未定义对`project
1回复

Cmake:制作静态库并在其他项目中使用

我需要进行库test并通过#include <libraryname>在其他项目中使用它 在项目test : 的CMakeLists.txt 在项目testUseLibrary : 的CMakeLists.txt main.cpp中 #include <li
2回复

CMake使用find_library()将自己的库添加到项目中

我目前正在创建一组应该在使用CLion的不同项目中使用的类。 我的问题是如何实现此功能。 到目前为止,我研究了以下相关问题并没有真正解决我的问题: CMake链接到外部库 将外部库添加到CMakeList.txt c ++ 关于add_library(),find_lib
2回复

CMake:使用需要静态库的动态库构建exe

我下载了一个框架,并决定将其捆绑为.so,以包括在我的其他项目中。 该框架确实依赖于一些静态库。 我在多篇文章中看到您无法将静态库链接到.so,因为并非所有链接器都支持此功能。 因此,我然后尝试将静态库链接到exe并也链接.so。 我收到错误消息,指出引用未定义(对静态库中内容的引用)