CMakeLists使用总结

常用变量

预定义变量

# 工程的根目录
	PROJECT_SOURCE_DIR
# 运行cmake命令的目录,通常是 ${PROJECT_SOURCE_DIR}/build
	PROJECT_BINARY_DIR
# 返回通过project命令定义的项目名称
	PROJECT_NAME
# 当前处理的CMakeLists.txt所在的路径
	CMAKE_CURRENT_SOURCE_DIR
# target编译目录
	CMAKE_CURRENT_BINARY_DIR

开关选项

# 设置C编译选项,也可以通过add_definitions()添加
CMAKE_C_FLAGS
# 设置CPP编译选项,也可以通过add_definitions()添加
CMAKE_CXX_FLAGS

CMakeLists.txt的编写

子目录下的 CMakeLists.txt 文件

# 搜索当前目录下所有.cpp文件
aux_source_directory(. DIR_LIB_SRCS)
# 生成链接库
add_library(myMathFuncs ${DIR_LIB_SRCS})

根目录下的 CMakeLists.txt 文件

# 指定cmake的最小版本
cmake_minimum_required(VERSION 3.0)

# 设置项目的project名称
# 会自动创建两个变量,PROJECT_SOURCE_DIR和PROJECT_NAME
# ${PROJECT_SOURCE_DIR}:本CMakeLists.txt所在的文件夹路径
# ${PROJECT_NAME}:本CMakeLists.txt的project名称
project(Test_demo)

# 配置编译选项
add_definitions("-Wall -g")
# 指定编程语言版本
add_definitions(-std=c++11)

# 配置编译类型
set(CMAKE_CXX_FLAGS_RELEASE "-DNDEBUG -Wall -O2")

# 设置变量,并用${变量}获取变量内容
# (1)set直接设置变量的值
set(SRC_LIST main.cpp test.cpp)
# (2)set追加设置变量的值
set(SRC_LIST main.cpp)
set(SRC_LIST ${SRC_LIST} test.cpp)
# (3)list追加或者删除变量的值
set(SRC_LIST main.cpp)
list(APPEND SRC_LIST test.cpp)
list(REMOVE_ITEM SRC_LIST main.cpp)

# 打印消息. 格式:message(消息)
message(${PROJECT_SOURCE_DIR})
message("build with debug mode")
message(WARNING "this is warnning message")

# 查找指定的包文件
find_package(OPENCV REQUIRED opencv)

# 添加include目录 -- 头文件的搜索目录
include_directories(
    ${CMAKE_CURRENT_SOURCE_DIR}
    ${CMAKE_CURRENT_SOURCE_DIR}/include
    ${CMAKE_CURRENT_SOURCE_DIR}/third_party/tools_1/include
	third_party/tools_2/include
)

# 添加子目录
add_subdirectory(myMath)

# 设置编译类型,分三类:
# add_executable(demo main.cpp) 		# 生成可执行文件
# add_library(common STATIC func.cpp) 	# 生成静态库
# add_library(common SHARED func.cpp) 	# 生成动态库或共享库
# 该示例为:编译可执行文件
#(1)明确指定包含哪些源文件
add_executable(${PROJECT_NAME} 
	main.cpp 
    protocol/func_1.cpp 
    protocol/func_2.cpp
)
#(2)搜索所有的cpp文件
aux_source_directory(. SRC_LIST) 				 # 搜索当前目录下所有.cpp文件
aux_source_directory(protocol SRC_PROTOCOL_LIST) # 搜索protocol目录下所有.cpp文件
add_executable(${PROJECT_NAME} 
	${SRC_LIST} 
	${SRC_PROTOCOL_LIST}
)
#(3)自定义搜索规则
file(GLOB SRC_LIST "*.cpp" "protocol/*.cpp")
add_executable(${PROJECT_NAME} 
	${SRC_LIST}
)
# 或者
file(GLOB SRC_LIST "*.cpp")
file(GLOB SRC_PROTOCOL_LIST "protocol/*.cpp")
add_executable(${PROJECT_NAME} 
	${SRC_LIST} 
	${SRC_PROTOCOL_LIST}
)     
# 或者
file(GLOB_RECURSE SRC_LIST "*.cpp") 					 # 递归搜索
file(GLOB SRC_PROTOCOL_LIST RELATIVE "protocol" "*.cpp") # 相对protocol目录下搜索
add_executable(${PROJECT_NAME} 
	${SRC_LIST} 
	${SRC_PROTOCOL_LIST}
) 
 
# 设置target需要链接的库
target_link_libraries(${PROJECT_NAME} 
    ${OPENCV_LIBRARIES} 
    ${CMAKE_CURRENT_SOURCE_DIR}/third_party/tools_1/lib/lib*.so
    third_party/tools_2/lib/lib*.a
    myMathFuncs
    pthread
)
# 安装
install(TARGETS ${PROJECT_NAME})

CMakeLists.txt的编译

在最顶层创建build文件夹,然后编译。即:

mkdir build && cd build
cmake ..
make

最终生成可执行文件:Test_demo
可以通过以下命令来运行该可执行文件:

./Test_demo

参考:
https://blog.csdn.net/qq_38410730/article/details/102477162
https://blog.csdn.net/afei__/article/details/81201039

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值