您好,欢迎来到五一七教育网。
搜索
您的当前位置:首页CMake手动编译生成动静态库并链接

CMake手动编译生成动静态库并链接

来源:五一七教育网

 参考内容

备忘:

对于如下结构的文件夹(假设inc内有头文件)

生成动态与静态库

如以下,第一行是编译所需最低版本,第二行是构建项目的名称

若头文件在其他路径下,可用include_directories自动查找头文件,输入参数为头文件所在文件夹路径,这里为${PROJECT_BINARY_DIR}/../inc

无论生成动态库还是静态库,都使用add_library实现,使用方法输入三个参数:库名称 动态or静态关键字 生成库所需源文件,关键字为SHARED与STATIC,分别对应动态.so文件与静态.a文件

设置最终生成库的名称可用set_target_properties,第一个参数为库名称,最后一个参数为新名称,一般会统一,方便最后链接到可执行文件

最后设置库默认生成的路径,可以指定库文件生成到你想要的位置,比如${PROJECT_BINARY_DIR}/../lib内

cmake_minimum_required (VERSION 2.8)
project (learn_cmake)
 
#整合目录内所有源文件至一变量   路径  源文件指代变量   ${PROJECT_BINARY_DIR}指cmake所在文件夹路径build
aux_source_directory(${PROJECT_BINARY_DIR}/../src SRC_LIST) 

#添加头文件
include_directories(${PROJECT_BINARY_DIR}/../inc)

#添加动态静态库  生成库名称  动态or静态  生成所需源文件(变量指代)
add_library(hello_shared SHARED ${SRC_LIST})
add_library(hello_static STATIC ${SRC_LIST})

#设置最终生成库名称  一般统一动静态库 
set_target_properties(hello_shared PROPERTIES OUTPUT_NAME "hello_lib")
set_target_properties(hello_static PROPERTIES OUTPUT_NAME "hello_lib")
 
#设置库默认生成位置路径  关键字  路径
set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/../lib)
cmake .
make

链接库文件至可执行文件

删除或注释刚才CMakeLists.txt的所有内容,按以下内容重新编辑

前四行和刚才一样

稍后会生成二进制的可执行文件,在生成之前可以先指定其生成位置,这里选择放在bin文件夹下,即${PROJECT_BINARY_DIR}/../bin

现在使用add_executable生成可执行文件,参数:最终生成的可执行文件名称 所有源代码(用先前定义的源码变量指代)

使用target_link_libraries链接库到可执行文件,参数:已有可执行文件的名称 所有库文件(用先前定义的库文件变量指代)

cmake_minimum_required (VERSION 2.8)
project (learn_cmake)

aux_source_directory(${PROJECT_BINARY_DIR}/../src SRC_LIST) 

include_directories(${PROJECT_BINARY_DIR}/../inc)

# 变量  查找库文件名称  库文件所在目录
find_library(HELLO_LIB hello_lib ${PROJECT_BINARY_DIR}/../lib)

#可执行文件生成路径  /build/../bin
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/../bin)

#生成可执行文件
add_executable(hello ${SRC_LIST})

#链接库到可执行文件
target_link_libraries(hello ${HELLO_LIB})
cmake .
make

运行可执行文件

./hello

将cpp源码移出工作文件夹后,程序依然可以运行

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- 517ttc.cn 版权所有 赣ICP备2024042791号-8

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务