c++学习:通过CMAKE创建两个库并安装
1.创建两个头文件
首先创建两个头文件,dlib.h和slib.h动态库文件和静态库文件:


在创建两个源文件关于两个库的功能:

创建一个main.cpp,去执行两个库:

此时的文件目录:include包含两个头文件,src是包含两个源文件

现在我开始编写我都CMakeLists.txt文件来管理我们的项目:
项目的最低版本要求和项目名称:

建立两个核心变量:头文件地址和源文件地址:
set(INCLUDE_DIR ${CMAKE_CURRENT_SORCE_DIR}/include)#变量名以及路径
set(SRC_DIR ${CMAKE_CURRENT_SORCE_DIR}/src)

添加库:
添加静态库
add_library(slib STATIC ${INCLUDE_DIR}/slib.h ${SRC_DIR}/slib.cpp)#库名称 库的属性 头文件地址和源文件地址
一般添加完库,头文件地址找不到,所以需要加一下头文件地址:
target_include_directories(slib
PUBLIC
$<BUILD_INTERFACE>:${INCLUDE_DIR} #构建时的路径
$<INSTALL_INTERFACE:include> #安装时的路径 )

同理添加动态库:
add_library(dlib SHARED ${INCLUDE_DIR}/dlib.h ${SRC_DIR}/slib.h)
target_include_directories( dlib
PUBLIC
$<BUILD_INTERFACE>:${INCLUDE_DIR}
$<INSTALL_INTERFACE>:include
)

两个库文件处理好了,此时要处理可执行文件:
add_executable(demo_install main.cpp)#可执行文件名称,可执行文件(如果不是与CMakeLists.txt同级需要加路径)
把两个库与可执行文件连接:
target_link_libraries(demo_install slib dlib)

此时构建的任务就已经完成了,我们需要编写安装的代码:
install(
TARGET ${PROJECT_NAME} slib dlib #目标
RUNTIME DESTINATION bin #可执行文件
LIBRARY DESTINATION include #动态库
ARCHIVE DESTINATION lib #静态库
)

install(DIRECTORY ${INCLUDE_DIR}/ #头文件原地址
DESTINATION include #安装后的地址
FILES_MATCHING PATTERN "*.h #只匹配h后缀的文件
)

此时所有操作都结束了,但是我们通常会遇到无法执行安装的可执行文件,我们需要写个这个脚本:if(UNIX)
set_target_properties( ${PROJECT_NAME} PROPERTIES
INSTALL_PATH "${CMAKE_INSTALL_PREFIX}/lib"
# 安装后可执行文件的RPATH
BUILD_WITH_INSTALL_RPATH OFF
# 构建时不使用安装RPATH(更合理)
)
endif()

更多推荐


所有评论(0)