C++ 静态库、动态库使用Cmake构建系统


案例1:无静态库、动态库参与

文件目录结构1

C++ 静态库、动态库使用Cmake构建系统
假设include目录存放头文件data.h包含函数声明,src目录存放对应的data.cpp文件包含函数定义、以及一个全局变量。main.cpp存放在文件根目录、包含main函数入口。

代码内容

C++ 静态库、动态库使用Cmake构建系统

C++ 静态库、动态库使用Cmake构建系统

C++ 静态库、动态库使用Cmake构建系统

常规编译指令

g++ main.cpp src/data.cpp -Iinclude -o main
C++ 静态库、动态库使用Cmake构建系统

Cmake构建

新建CMakeList.txt文件,填写以下4行内容:

cmake_minimum_required(VERSION 3.5)
project (hello_cmake1)
include_directories(include/)		# 与g++ 命令的 -Iinclude 参数等价
add_executable(main main.cpp src/data.cpp)	# g++ main.cpp src/data.cpp -o main

效果:
C++ 静态库、动态库使用Cmake构建系统
C++ 静态库、动态库使用Cmake构建系统

案例2:静态链接库参与

原来三个文件的代码不变。
首先看常规的基于g++ 编译生成静态链接库的命令:

cd src	
g++ data.cpp -c -I../include	# 汇编,生成data.o文件
ar rs libdata.a data.o			# 生成静态库 libdata.a
cd ..
g++ main.cpp -Iinclude -Lsrc -ldata -o static_main	# 链接,生成可执行文件static_main

C++ 静态库、动态库使用Cmake构建系统

Cmake构建

新建CMakeList.txt文件,填写以下内容:

cmake_minimum_required(VERSION 3.5)
project (hello_cmake2)

# 生成静态链接库
add_library(Data STATIC src/data.cpp)
target_include_directories(Data PUBLIC ${PROJECT_SOURCE_DIR}/include)

# 生成可执行文件
add_executable(static_main main.cpp)

# 链接静态/共享 库文件
target_link_libraries(static_main PUBLIC Data)

效果:
C++ 静态库、动态库使用Cmake构建系统
C++ 静态库、动态库使用Cmake构建系统

案例3:动态链接库参与

原来三个文件的代码不变。
首先看常规的基于g++ 编译生成动态链接库的命令:

cd src
g++ data.cpp -I../include -fPIC -shared -o libdata.so
# 上一条等价于下面两条: 
#      g ++ data.cpp -I../include -c -fPIC		汇编,生成data.o文件
#	g++ -shared -o libdata.so data.o		生成动态库 libdata.so		
cd ..
g++ main.cpp -Iinclude -Lsrc -ldata -o share_main	 # 链接,生成可执行文件static_main

Cmake构建

cmake_minimum_required(VERSION 3.5)
project (hello_cmake3)

# 生成动态链接库
add_library(Data2 SHARED src/data.cpp)
target_include_directories(Data2 PUBLIC ${PROJECT_SOURCE_DIR}/include)

# 添加编译参数
add_compile_options(-w -std=c++11 -O2)

# 生成可执行文件
add_executable(share_main main.cpp)
# 链接静态/共享 库文件
target_link_libraries(share_main PUBLIC Data2)

效果:
C++ 静态库、动态库使用Cmake构建系统
C++ 静态库、动态库使用Cmake构建系统

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/282105.html

(0)
上一篇 2022年8月25日
下一篇 2022年8月25日

相关推荐

发表回复

登录后才能评论