本节我们来学习,cmake的安装,将我们构建的目标安装到指定位置,为了模拟一般情况,实现了 可执行文件、静态库、动态库的安装,以及一般的 file 安装、代码的安装
本专栏的实践代码全部放在 github 上,欢迎 star !!!
如有问题,欢迎留言、或加群【392784757】交流
接下来将分步给出今天的CMakeLists.txt 内容
cmake_minimum_required(VERSION 3.20)
project(cmake_install)
静态库的构建
# 静态库 导出 .lib .a
file(WRITE include/slib.h "void slib();")
# 私有头文件
file(WRITE include/slib_pri.h "#define PRI")
file(WRITE slib.cpp "void slib(){}")
add_library(slib STATIC slib.cpp include/slib.h include/slib_pri.h)
set_target_properties(slib PROPERTIES
PUBLIC_HEADER include/slib.h
)
set_target_properties(slib PROPERTIES
PRIVATE_HEADER include/slib_pri.h
)
动态库的构建【需要设置在windows平台下 符号导出】
file(WRITE include/dlib.h [=[
#ifdef _WIN32
__declspec(dllexport)
#endif
void dlib();
]=])
file(WRITE dlib.cpp [=[
#include "dlib.h"
void dlib(){}
]=])
add_library(dlib SHARED dlib.cpp include/dlib.h)
target_include_directories(dlib PUBLIC include)
可执行程序的构建
file(WRITE main.cpp [=[
#include "dlib.h"
#include "slib.h"
int main()
{
dlib();
slib();
return 0;
}
]=])
add_executable(${PROJECT_NAME} main.cpp)
target_include_directories(${PROJECT_NAME} PUBLIC include)
target_link_libraries(${PROJECT_NAME} dlib)
target_link_libraries(${PROJECT_NAME} slib)
安装构建目标
默认安装路径
- linux /usr/local
- windows c:/program files(x86) 【会出现权限不够、安装失败的情况】
- windows 默认构建是 debug版本,安装是 release 版本,因此执行命令时需要指定 --config 统一
安装路径指定,两种方式
- -DCMAKE_INSTALL_PREFIX=
- set(CMAKE_INSTALL_PREFIX " ")
安装
install(TARGETS ${PROJECT_NAME} RUNTIME DESTINATION bin)
install(TARGETS dlib slib
RUNTIME DESTINATION bin
ARCHIVE DESTINATION lib
# 头文件的安装
PUBLIC_HEADER DESTINATION include # 公开头文件
PRIVATE_HEADER DESTINATION inc # 内部头文件
)
debug release 设置不同输出路径
install(TARGETS ${PROJECT_NAME}
CONFIGURATIONS Debug
RUNTIME DESTINATION debug/bin
)
install(TARGETS ${PROJECT_NAME}
CONFIGURATIONS Release RelWithDebInfo MinSizeRel
RUNTIME DESTINATION release/bin
)
构建指令 windows,注意指定类型
cmake -S . -B win -DCMAKE_INSTALL_PREFIX=win_out
cmake --build win --config Debug
cmake --install win --config Debug
经常make之后忘记make install... 然后自己手动去找build/bin目录去做软链接..