C++使用cmake编译时,CMakeLists.txt如何编写

首先需要生成一个CMakeLists.txt文件,代码的链接关系都写在这里面。填入如下代码:

cmake_minimum_required(VERSION 3.22)	# 声明要求的cmake最低版本
project(projectname) 					# 声明一个cmake工程,projectname是工程名字
set(CMAKE_CXX_STANDARD 17)				# 指定C++版本
set(CMAKE_BUILD_TYPE "Debug") 			# 设置编译模式,如Debug或Release
set(CMAKE_CXX_FLAGS "-O3") 				# 设置编译器的优化级别为最高,以优化生成的代码

include_directories("/usr/include/eigen3") # 将该目录添加到项目的头文件搜索路径中

find_package(Program REQUIRED)  				# 加载Program库,如果找不到,报错
include_directories(${Program_INCLUDE_DIRS}) 	# 将该库头文件路径添加到项目的头文件搜索路径中

# 添加可执行程序
add_executable(programname program.cpp) # (程序名 源文件)

# 添加库文件(有自定义库时program.cpp需要包含library.h文文件)
add_library(library library.cpp) 				# 静态库
add_library(library_shared SHARED library.cpp)	# 共享库

# 链接库
target_link_libraries(programname library) # 将静态库(或共享库)链接到可执行程序上
target_link_libraries(programname ${Program_LIBRARIES}) # 将Program库链接到可执行程序上

set(CMAKE_CXX_FLAGS “-O1”):编译时,编译器只执行一些基本的优化,通常会提高编译速度,并且生成的可执行文件相对较小。
set(CMAKE_CXX_FLAGS “-O2”):编译器将执行更多的优化,可以在保持合理编译时间的同时,生成相对高效的可执行文件。
set(CMAKE_CXX_FLAGS “-O3”):将编译器的优化级别设置为最高,可能会使编译时间增加,但可以生成更高效的可执行文件。

find_package(Program REQUIRED) 告诉CMake去寻找并加载Program库,REQUIRED 选项表示该库是项目的必要组件,如果找不到,CMake 将会报错。${Program_INCLUDE_DIRS}是一个变量,它包含了该库的头文件路径。 这样项目中的源文件就可以通过#include来引用该库了。如下所示:

find_package(Pangolin REQUIRED)
include_directories(${Pangolin_INCLUDE_DIRS})
target_link_libraries(programname ${Pangolin_LIBRARIES})

C++ 中,add_library 函数用于将源文件编译成库文件。它可以用于创建静态库(.a 文件)或共享库(.so 文件或.dll 文件,取决于操作系统)。区别主要体现在库的链接方式和使用场景:

  • 静态库(Static Library):编译后生成的是一个静态链接库(.a
    文件),包含了编译后的目标文件的代码和数据。静态库会被完整地链接到可执行文件中,在编译时会被复制到可执行文件中,因此可执行文件的体积较大。
  • 共享库(Shared Library):编译后生成的是一个共享链接库(.so 文件或.dll文件,取决于操作系统),包含了编译后的目标文件的代码和数据。共享库会被链接到可执行文件中,但在运行时不会被复制到可执行文件中,而是在系统内存中共享使用。共享库可以减小可执行文件的体积,并允许多个程序共享同一个库的代码和数据。当你想要在运行时动态地链接库到可执行文件中时,可以使用共享库。

总的来说,静态库的优势是可移植性和简单性,而共享库的优势是节省内存空间和允许动态更新库。选择使用哪种类型的库取决于你的具体需求和项目的要求。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值