首页 > 编程语言 >C++ 静态库、动态库使用Cmake构建系统

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

时间:2022-08-24 18:01:12浏览次数:70  
标签:src include Cmake 静态 C++ ++ cpp main data

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

文件目录结构1


假设include目录存放头文件data.h包含函数声明,src目录存放对应的data.cpp文件包含函数定义、以及一个全局变量。main.cpp存放在文件根目录、包含main函数入口。

代码内容

常规编译指令

g++ main.cpp src/data.cpp -Iinclude -o main

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

效果:

案例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

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)

效果:

案例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)

效果:

标签:src,include,Cmake,静态,C++,++,cpp,main,data
From: https://www.cnblogs.com/Higgerw/p/16621093.html

相关文章