视频学习地址08-重命名和安装共享库_哔哩哔哩_bilibili
1、同时创建动态连接和静态连接库
SET_TARGET_PROPERTIES
这条指令可以用来设置输出的名称,对于动态库,还可以用来指定动态库版本和API版本
SET(LIBHELLO_SRC hello.cpp)ADD_LIBRARY(hello_static STATIC ${LIBHELLO_SRC})#生成静态库
#对hello_static重命名成hello
SET_TARGET_PROPERTIES(hello_static PROPERTIES OUTPUT_NAME "hello")
#cmake 在构建一个新的target时,会尝试清理掉其他使用这个名字的库,因此在构建libhello.so时候,会清理掉libhello.a
SET_TARGET_PROPERTIES(hello_static PROPERTIES CLEAN_DIRECT_OUTPUT 1)ADD_LIBRARY(hello SHARED ${LIBHELLO_SRC})
SET_TARGET_PROPERTIES(hello PROPERTIES OUTPUT_NAME "hello")
SET_TARGET_PROPERTIES(hello PROPERTIES CLEAN_DIR_OUTPUT 1)
SET_TARGET_PROPERTIES(hello PROPERTIES VERSION 1.1 SOVERSION 1)生成版本号
VERSION 指代动态库版本,SOVERSION 指代api版本
2、安装共享库和头文件
INSTALL(FILES hello.h DESTINATION include/hello)
INSTALL(TARGETS hello hello_static LIBRARY DESTINATION lib ARCHIVE DESTINATION lib)
安装动态库静态库,动态库和静态库的安装路径
默认是安装到<prefix>/include/hello目录
安装时指定路径
cmake -D CMAKE_INSTALL_PREFIX=/usr ..
3、使用外部库文件
INCLUDE_DIRECTORIES(/usr/include/hello)#添加头文件搜索路径
ADD_EXECUTABLE(hello main.cpp)后面加link
TARGET_LINK_LIBRARIES(hello libhello.so)#关联.so
或者使用
LINK_DIRECTORIES(/home/XXX/libs) 指定第三方库所在路径
4、两个特殊的环境变量
CMAKE_INCLUDE_PATH CMAKE_LIBRARY_PATH
这两个是环境变量不是cmake变量,可以在linux的bash中进行设置。
我们上面使用INCLUDE_DIRECTORIES(/usr/include/hello)来指明include路径也可以使用环境变量
export CMAKE_INCLUDE_PATH=/usr/include/hello
使用静态库
cmake_minimum_required(VERSION 3.0)
project(TEST)
file(GLOB SRC_LIST ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp)
# 指定源文件或者动态库对应的头文件路径
include_directories(${PROJECT_SOURCE_DIR}/include)
# 指定要链接的动态库的路径
link_directories(${PROJECT_SOURCE_DIR}/lib)
# 添加并生成一个可执行程序
add_executable(app ${SRC_LIST})
# 指定要链接的动态库
target_link_libraries(app pthread calc)
定义宏
为了让测试更灵活,我们可以不在代码中定义这个宏,而是在测试的时候去把它定义出来,其中一种方式就是在gcc/g++命令中去指定,如下:
$ gcc test.c -DDEBUG -o app
在gcc/g++命令中通过参数 -D指定出要定义的宏的名字,这样就相当于在代码中定义了一个宏,其名字为DEBUG。
在CMake中我们也可以做类似的事情,对应的命令叫做add_definitions:
add_definitions(-D宏名称)
针对于上面的源文件编写一个CMakeLists.txt,内容如下:
cmake_minimum_required(VERSION 3.0)
project(TEST)
# 自定义 DEBUG 宏
add_definitions(-DDEBUG)
add_executable(app ./test.c)
作者: 苏丙榅
链接: https://subingwen.cn/cmake/CMake-primer/