我进入CMake的使用与C,实际上,我创建了两个非常小的静态库。
我的目标是:
- 该库被编译并链接到* .a文件。 [这工作]
- 然后,我希望到* .a文件复制到/ usr / local / lib目录[这也适用]
- 据我了解库(很少),他们使用链接
-lnameoflib
,这是一个编译器标志。 好。 我已准备了我的CMakeLists.txt,它实际上拷贝* .a文件到/usr/local/lib
。 但是,为了能够在程序中使用它们,我也需要他们的头文件复制到/usr/local/include
,那么我可以包括它们的简单方法#include <mylibheader.h>
这就是我现在该怎么理解。
我的问题是 - 复制头文件到/ usr /的正确方式是如何包括与CMake的文件夹? 我想它的时候它们会自动复制make install
执行,如* .a文件是。
对于这两个库的我有一个smiliar的CMakeLists.txt:
project(programming-network)
add_library(programming-network STATIC
send_string.c
recv_line.c
)
INSTALL(TARGETS programming-network
DESTINATION "lib"
)
对于最新版本的CMake一个更好的办法是使用目标的PUBLIC_HEADER
属性。
project(myproject)
add_library(mylib some.c another.c)
set_target_properties(mylib PROPERTIES PUBLIC_HEADER "some.h;another.h")
INSTALL(TARGETS mylib
LIBRARY DESTINATION some/libpath
PUBLIC_HEADER DESTINATION some/includepath
)
一些参考:
PUBLIC_HEADER
CMake的安装命令
在一个更好的方法,将复制该模式匹配的所有文件和将保留目录结构。
INSTALL (
DIRECTORY ${CMAKE_SOURCE_DIR}/include/
DESTINATION include
FILES_MATCHING PATTERN "*.h*")
我不认为你的解决方案是正确的。 /usr/include
应保留您的供应商把文件英寸
国际海事组织做正确的事情是安装在头部/usr/local/include
,然后指导用户export CPATH="/usr/local/include:${CPATH}"
。
这似乎/usr/local/lib
自动被搜索,但如果你希望使用另外DIR export LIBRARY_PATH="/usr/local/lib:${LIBRARY_PATH}"
工程,为.A二进制类似(但可能会或可能无法正常工作好共享库取决于你的操作系统)。
可选的,但更麻烦的是增加-I /usr/local/include
和-L /usr/local/lib
,而编译。
这是一个有些主观的答案,但它已经为我工作很好。
文章来源: CMAKE - How to properly copy static library's header file into /usr/include?