Cmake安装目标触发
我正在用cmake编写构建配置:除了带有自己代码的主项目外,还有一些外部库。为了方便更新这些库(zlib、libpng等),我不想修改它的cmakelists文件,但我需要特定的库目标(例如在target_link_libraries()中使用)。 另一个限制是,我不能只说我的代码需要安装外部库,所有东西都必须位于一个源代码树中,并且必须一起构建。 为了使库提供的所有内容保持结构化(libs、headers),我想将库(如Cmake安装目标触发,cmake,Cmake,我正在用cmake编写构建配置:除了带有自己代码的主项目外,还有一些外部库。为了方便更新这些库(zlib、libpng等),我不想修改它的cmakelists文件,但我需要特定的库目标(例如在target_link_libraries()中使用)。 另一个限制是,我不能只说我的代码需要安装外部库,所有东西都必须位于一个源代码树中,并且必须一起构建。 为了使库提供的所有内容保持结构化(libs、headers),我想将库(如makeinstalldoes)安装到本地建筑文件夹中,然后包括生成的cm
makeinstall
does)安装到本地建筑文件夹中,然后包括生成的cmake文件,以便将所需的目标导入到我的项目中
我认为流程如下:
add_子目录()
add_subdirectory
之后触发install
target)。我可以构建和安装所有库,然后构建自己的代码,但这并不方便
所以问题是,我如何告诉cmake在构建期间进行中间安装
这里有一个小的工作示例:
文件结构:
prj/CMakeLists.txt
prj/src/main.cpp
lib/CMakeLists.txt
lib/include/libheader.h
lib/src/libsource.cpp
prj/CMakeLists.txt
项目(TestProject)
cmake_最低要求(2.8版)
设置(CMAKE_VERBOSE_MAKEFILE on)
集合(工作目录${CMAKE\u当前目录$\u源目录})
#这里应该使用add_子目录(强制安装)。
#然后包含预先指定的包含文件,如下所示。
include_目录(${WORK_DIR}/./lib/build/install/include)
包括(${WORK\u DIR}/./lib/build/install/lib/lib/libtargets.cmake)
添加可执行文件(main${WORK\u DIR}/src/main.cpp)
目标链接库(主库目标)
lib/CMakeLists.txt
项目(TestLib)
cmake_最低要求(2.8版)
设置(CMAKE_VERBOSE_MAKEFILE on)
集合(工作目录${CMAKE\u当前目录$\u源目录})
包含目录(${WORK\u DIR}/include)
添加库(库目标静态${WORK\u DIR}/src/libsource.cpp)
设置(CMAKE\u安装\u前缀${CMAKE\u当前\u二进制\u目录}/INSTALL)
安装(文件${WORK\u DIR}/include/libheader.h DESTINATION include)
安装(目标库\目标目标库导出libtargets)
安装(导出libtargets目标库)
prj/src/main.cpp
#包括
#包括“libheader.h”
使用std::cout;
int main()
{
对不起,我无权发表评论
所以,我把参考链接放在这里
在中包含预构建的库二进制文件时,这也很有用
项目
添加_库(预构建静态导入)设置_属性(目标预构建
属性导入(位置${CMAKE\u CURRENT\u SOURCE\u DIR}/libprebuild.a)
安装(目标为其他\u已构建\u预构建目标
导出项目导出
运行时目标箱
库目标库
存档目标库)
使预构建的导入目标便于在
项目,并将其与任何其他目标一样进一步处理
看一看模块