浅谈cmake,编写CMakeList.txt

简介: 浅谈cmake,编写CMakeList.txt

一、编写CMakeLists.txt

1、同目录下单文件

①在.c文件的同级目录下创建CMakeLists.txt文件

②编写CMakeLists.txt #后为注释

多行注释#[[

]]

③一个基本的CMakeLists.txt编写例子

# CMake 最低版本号要求  防止新语法规则和避免兼容性问题--一般都要加上
cmake_minimum_required (VERSION 2.8)

# 当前项目名称--注意这个不是可执行文件
project (Test)

# 指定生成目标 将1.c生成1  注意,可在1后面添加若干个.c文件
add_executable(1 1.c)

2、同目录下多文件

CMakeLists.txt编写可如下

# CMake 最低版本号要求  防止新语法规则和避免兼容性问题
cmake_minimum_required (VERSION 2.8)

# 当前项目信息--注意这个不是可执行文件
project (Test)

# 指定生成目标 将*.c生成main  注意,可在main后面添加若干个.c文件
add_executable(main main.c Mystring.c 1.c)

但是遇到和之前自己编写makefile的老问题,文件多了,写的容易错漏

使用Cmake命令aux_source_directory (dir 变量名)

cmake:

aux_source_directory (. CUR_SRC) #定义cmake变量

${CUR_SRC} #引用变量

#使用变量做出如下改进

# CMake 最低版本号要求  防止新语法规则和避免兼容性问题
cmake_minimum_required (VERSION 2.8)

# 当前项目信息--注意这个不是可执行文件
project (Test)

# 查找当前目录 . 下的所有源文件.c文件
# 并将名称保存到 DIR_SRCS 变量
aux_source_directory(. DIR_SRCS)

# 指定生成目标
add_executable(main ${DIR_SRCS})

3、不同目录下多文件

添加头文件路径:include_directories(指定头文件路径名-相当当前路径写-I路径)

例子:

include_directories (inc)

include_directories (./inc)

以上所有的路径都是从CMakeLists.txt所在路径为起点的相对路径


使用静态库的方式,将不同源文件目录下的.c源文件生成.a文件

①添加子目录:add_subdirectory(指定子目录)

这个命令是告诉当前路径层的CMakeLists.txt 还有额外的目录层需要处理

②添加指定静态库到指定目标:target_link_libraries(目标 库名)

③将指定若干.c源文件编译打包生成静态库文件:add_library (库名 源文件列表)

#最上层的CMakeLists.txt---只管当前目录层的源文件

#版本号
cmake_minimum_required (VERSION 2.8)

#项目信息
project (Test)

#头文件
include_directories(inc)

#指定src为当前目录的子目录
add_subdirectory (src)

#查找当前目录的下所有源文件,保存在CUR_SRC中
aux_source_directory(. CUR_SRC) 

#生成指定目标文件
add_executable (./bin/main ${CUR_SRC})

#先创建main再把库链接到main(注意顺序)

#将指定的库/src/libmylib.a链接到指定目标可执行程序main
target_link_libraries(./bin/main mylib)
#子层的版本号,项目信息可写可不写
cmake_minimum_required (VERSION 2.8)

project (Test)

#.c-->.a静态库

include_directories(inc)

#设置静态库路径,--把静态库libmylib.a放在lib目录下
set(LIBRARY_OUTPUT_PATH ./../lib)

#将当前目录下所有.c放在LIB_SRC中
aux_source_directory(. LIB_SRC)

#将所有.c文件打包生成静态库文件libmylib.a
add_library(mylib ${LIB_SRC}) 

二、拓展:

Cmake默认变量–不需要你定义 可直接使用 有固定意义

PROJECT_NAME:代表当前的项目名称

关于默认变量:

①在引用时要加 ${默认变量名}

②在设置默认变量时,使用set命令 规则:

set (变量名 变量的值)

例如:

set (LIBRARY_OUTPUT_PATH ./…/lib) #设置cmake当前层生成.a .so库文件的存放位置

相关文章
|
7月前
|
存储 缓存 IDE
CMake之编写属于自己的Findxxx.cmake文件:定义一个定制化的CMakeLists.txt文件
CMake之编写属于自己的Findxxx.cmake文件:定义一个定制化的CMakeLists.txt文件
147 1
|
C++
2022-9-28-CMAKE工程中Cmakelist文档编写的一些注意点
2022-9-28-CMAKE工程中Cmakelist文档编写的一些注意点
114 0
|
Linux C语言
多文件目录Makefile的写法
多文件目录Makefile的写法
|
Shell C语言
|
计算机视觉
CMakeLists用法
CMakeLists用法
162 0
|
Shell Linux C语言
Makefile文件 | 编写指南
Makefile文件 | 编写指南
336 0
|
缓存
CMake实战二:多个源文件,同一或多个目录
CMake实战一只有单个源文件,现在把add函数写入myMath.cpp的源文件里面,声明放到myMath.h源文件里面
1078 0
|
缓存 Linux
CMake实战一:单个源文件
CMake 支持大写、小写和大小写混合命令。
138 0
|
C++ 计算机视觉 编译器
CMakeLists.txt
示例(在编写CMakeLists.txt前, 创建好src, include, lib, bin, build目录, 其中cmake ..在build目录中执行) # 一般都会先声明cmake的版本 CMAKE_MINIMUM_REQUIRED(VERSION 2.
1375 0
下一篇
DataWorks