CMakeLists.txt 学习笔记1

一. Cmake 简介

二. 常用指令

1.  指定需要的最小的cmake版本

cmake_minimum_required(VERSION 3.4.0) 

此命令是optional,如果CMakeLists.txt中使用了特定版本中才具备的命令,就需要加上这个行,提醒用户升级到了较高版本之后在执行cmake。

2. 设置项目名称

project(projectName)

此命令是optional。如果添加此命令,会引入两个变量projectName_BINARY_DIR和projectName_SOURCE_DIR, 同时cmake会自动定义变量PROJECT_BINARY_DIR 和PROJECT_SOURCE_DIR.

3. 设置编译类型

add_executable(projectname) # 生成可执行文件
add_library(common STATIC demo.cpp) #生成静态库
add_library(common SHARED demo.cpp) #生成动态库或共享库

 在linux下生成文件为:projectname                                         

                                     libcommon.a

                                     libcommon.so

在window下生成文件为:projectname.exe

                                         libcommon.lib

                                         libcommon.dll

4. 指定编译包含的源文件

  • 明确指定包含哪些源文件

add_library(demo demo.cpp test_1.cpp test_2.cpp )

  •  搜索所有的cpp文件
aux_source_directory(. SRC_LIST) #搜索当前目录下的所有.cpp文件并保存到SRC_LIST变量中
add_library(demo ${SRC_LIST})
  •  自定义搜索规则 
file(GLOB SRC_LIST "*.cpp" "protocol/*.cpp")
add_library(demo ${SRC_LIST})

#或者
file(GLOB SRC_LIST "*.cpp")
file(GLOB SRC_PROTOCOL_LIST "protocol/*.cpp")
add_library(demo ${SRC_LIST} ${SRC_PROTOCOL_LIST})

#或者
aux_source_directory(. SRC_LIST)
aux_source_directory(protocol SRC_PROTOCOL_LIST)
add_library(demo ${SRC_LIST} ${SRC_PROTOCOL_LIST})

5. 查找指定库文件

find_library()

6. 设置包含的目录

include_directories(
    ${CMAKE_CURRENT_SOURCE_DIR}
    ${CMAKE_CURRENT_BINARY_DIR}
    ${CMAKE_CURRENT_SOURCE_DIR}
)

linux 下还可以通过如下方式设置包含的目录

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -I${CMAKE_CURRENT_SOURCE_DIR}")

7. 设置链接库搜索目录

link_directories(
    ${CMAKE_CURRENT_SOURCE_DIR}/libs
)

 linux下还可以通过如下方式设置包含的目录

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -L${CMAKE_CURRENT_SOURCE_DIR}/libs")

8. 设置target需要链接的库

target_link_libraries(<name> lib1 lib2 lib3) #将lib1,lib2,lib3链接到<name>上

target_link_libraries 里库文件的顺序符合被依赖的库放在依赖它的库的后面,例如上面的例子中lib1可能依赖lib2和lib3.

  •  指定链接动态链接库或静态链接库
target_link_libraries(demo lib1.a) # 链接lib1.a
target_link_libraries(demo lib2.so) # 链接lib2.so
  •  指定全路径
target_link_libraries(demo ${CMAKE_CURRENT_SOURCE_DIR}/libs/lib1.a) # 链接lib1.a
target_link_libraries(demo ${CMAKE_CURRENT_SOURCE_DIR}/libs/lib2.so) # 链接lib2.so
  •  指定链接多个库 
target_link_libraries(demo
    ${CMAKE_CURRENT_SOURCE_DIR}/libs/lib1.a
    boost_system.a
    boost_thread
    pthread
)

9. 设置变量

  • set设置变量的值
set(SRC_LIST main.cpp test.cpp)
add_executable(demo ${SRC_LIST})
  • set追加设置变量的值 
set(SRC_LIST main.cpp)
set(SRC_LIST ${SRC_LIST} test.cpp)
add_executable(demo ${SRC_LIST})
  • list追加或删除变量的值 
set(SRC_LIST main.cpp)
list(APPEND SRC_LIST test.cpp)
list(REMOVE_ITEN SRC_LIST main.cpp)
add_executable(demo ${SRC_LIST})

10 文件操作命令

file

#将message写入filename文件中,会覆盖文件原有内容
file(WRITE filename "message")

#将message写入filename文件中,会追加在文件末尾
file(APPEND filename "message")

#从filename文件中读取内容并保存到var变量中,如果指定了numBytes和offset,则从offset处开始最多读numBytes个字节 ,另外如果指定了HEX参数,则内容会以16进制形式存储在var变量中
file(READ filename var [LIMIT numBytes] [OFFSET offset] [HEX])
#创建目录
file(MAKE_DIRECTORY [dir1 dir2 ...])

#会把path转换为以unix的/开头的cmake风格的路径,保存在result中
file(TO_CMAKE_PATH path result)

#它会把cmake风格的路径转换为本地路径风格:windows下用‘\’,而unix下用‘/’
file(TO_NATIVE_PATH path result)

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

            https://www.jianshu.com/p/8909efe13308

 

 

 

 

   

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xinran0703

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值