Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用CMake在项目中添加预构建的静态库?_Cmake_Static Libraries_Clion - Fatal编程技术网

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

如何使用CMake在项目中添加预构建的静态库?,cmake,static-libraries,clion,Cmake,Static Libraries,Clion,Clion:如何在我的项目中添加或(使用)预构建的静态库?你的问题与Clion无关,它是纯CMake。从项目中修改CMakeLists.txt并使用添加库。这可能会有帮助 我误解了这个问题,target\u link\u library可能是这个问题的答案。您可能在问如何将项目链接到预构建的静态库。如果是这样,你可以打电话来 假设您的项目名为myProj和预构建的库myLib.lib,您可以这样做: target_link_libraries(myProj myLib) 我很难做到这一点,因为

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

你的问题与Clion无关,它是纯CMake。从项目中修改CMakeLists.txt并使用
添加库
。这可能会有帮助


我误解了这个问题,
target\u link\u library
可能是这个问题的答案。

您可能在问如何将项目链接到预构建的静态库。如果是这样,你可以打电话来

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

target_link_libraries(myProj myLib)

我很难做到这一点,因为我对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\u directories
命令包括目录:

include_directories(${LIB_INCLUDES})
上面将指示构建系统搜索
LIB\u INCLUDES
中包含的所有目录,或您决定调用它的任何目录

最后,添加可执行文件并使用
target\u link\u libraries
命令链接
libClassLibrary.a

add_executable(MyExecutable main.cpp)
target_link_libraries(MyExecutable ${LIB_TO_INCLUDE})
就这些。您会注意到,在“项目管理器”窗口中的“外部库”>“标题搜索路径”下,会显示包含标题文件的目录


PS-Ken Martin和Bill Hoffmann的《掌握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})

通过添加
消息(${Test_LIB})
,您可以打印并检查路径。

@Andreyua这将只是
目标链接库(myProj/tmp/balabla/mylib.a)
)@herohuyongtao我仍然收到以下错误
找不到-llibusb1.0
我的
目标链接库(本地库libusb1.0)
错误你能帮我一下吗?
添加库
用于构建你自己的库。正如@herohuyongtao所说,答案是使用
target\u link\u libraries
将库添加到目标的链接行中。