CMakeList--->CMakeList的编写,cmake,平台通用项目构建工具
生活随笔
收集整理的这篇文章主要介绍了
CMakeList--->CMakeList的编写,cmake,平台通用项目构建工具
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
视频教程康康这个Bilibili点击跳转,由于本文信息密度大,比较详细,可能略显繁琐,还请耐心阅读🐱
文章目录
- CMakeList 语法精述
- PROJECT 工程名
- SET 设置变量
- MESSAGE 打印信息
- ADD_EXECUTABLE 生成可执行文件
- ADD_SUBDIRECTORY 添加子目录
- ADD_LIBARY 输出库
- SET_TARGET_PROPERTIES
- INCLUDE_DIRECTORIES 添加头文件路径
- LINK_DIRECTORIES 添加库搜索路径
- TARGET_LINK_LIBRARIES 添加库名称
- 内部构造和外部构造(更改cmake的生成目录)
- CMakeList.txt添加子关联CMakeList.txt,更好的进行工程组织
- Demo
- 经验记录
- windows cmake没有生成 Makefile
- 参考
CMakeList 语法精述
PROJECT 工程名
- 功能是指定工程名,并且支持语言是C和C++PROJECT(project_name C CXX)
- 隐式定义了两个cmake变量 <project_name>_BINARY_DIR与 <project_name>_SOURCE_DIR,可以直接使用,默认指向当前目录
- 如果修改工程名这两个变量的名字也会随之改变,也可以使用cmake预定义的PEOJECT_BINARY_DIR和PEOJECT_SOURCE_DIR来代隐式定义的两个变量,他们的内容是一样的
SET 设置变量
- 用来设置指定的变量SET(SRC_LIST main.cpp test1.cpp test2.cpp)
MESSAGE 打印信息
- 向终端输出用户自定义的信息
- 包含三种信息
SEND_ERROR产生错误生成过程被跳过
SATUS生成前缀为- -的信息
FATAL_ERROR立即终止所有cmake过程
ADD_EXECUTABLE 生成可执行文件
- 生成可执行文件ADD_EXECUTABLE(HELLO main.cpp test1.cpp) #也可以写成 ADD_EXECUTABLE(HELLO ${SRC_LIST})
ADD_SUBDIRECTORY 添加子目录
- 添加子目录,并且指定其生成文件存放目录
如下添加源文件存放的src目录,并指定存放目录为bin,若不指定存放目录,则会存放在src目录中ADD_SUBDIRECTORY(src bin)
ADD_LIBARY 输出库
- 生成库文件ADD_BIBARY(lib_name SHARD libSource.cpp)
- 可以生成SHARD(动态库)、STATIC(静态库)两种库文件
SET_TARGET_PROPERTIES
- 指定输出的名称,对于动态库还可以指定动态库的版本和API
如下为创建同名动态库和静态库ADD_LIBARY(hell_static STATIC hello.cpp) #重命名为hello SET_TARGET_PROPERTIES(hello_static PROPERTIES OUTPUT_NAME "hello") #创建时清理同名文件防止创建失败 SET_TARGET_PROPERTIES(hello_static PROPERTIES CLEAR_DIRECT_OUTPUT 1)ADD_LIBARY(hell_share SHARE hello.cpp) #重命名为hello SET_TARGET_PROPERTIES(hell_share PROPERTIES OUTPUT_NAME "hello") #创建时清理同名文件防止创建失败 SET_TARGET_PROPERTIES(hell_share PROPERTIES CLEAR_DIRECT_OUTPUT 1)
INCLUDE_DIRECTORIES 添加头文件路径
- 可以向工程添加多个头文件的路径,路径之间用空格隔开INCLUDE_DIRECTORIES(path/include/)
LINK_DIRECTORIES 添加库搜索路径
- LINK_DIRECTORIES(path/lib/)
TARGET_LINK_LIBRARIES 添加库名称
- TARGET_LINK_LIBRARIES(project_name libname.so)
内部构造和外部构造(更改cmake的生成目录)
- 将文件都生成在当前目录是内部构造,这种情况很乱
- 将文件生成在其他位置是外部构造,可以更好的整理工程目录#示例 在当前目录创建一个文件夹(随意命名),我命名为build #切换至build目录下执行cmake 参数跟至CMakeList.txt存在的目录即可,这里..找到上级目录即可 #因为我的是windows环境,我需要指定生成makefile所以需要添加 -G "Unix Makefiles"cmake .. -G "Unix Makefiles"
CMakeList.txt添加子关联CMakeList.txt,更好的进行工程组织
- 对于不同工程目录下的文件有时候需要更好的组织起来
- 根目录下编写一个CMakeList.txt,src目录下再编写一个CMakeList.txt
- 其中根目录 CMakeList.txt内容如下PROJECT(HELLO) #src 指存放源文件的子目录 bin为其二进制文件和中间文件的存放目录 ADD_SUBDIRECTORY(src bin)
- src目录下 CMakeList.txt内容如下SET(SRC_LIST main.cpp)add_executable(hello ${SRC_LIST})
- 在build目录下执行根目录下的CMakeList.txt即可生成可执行文件
Demo
- 看了这么多来一个具体并且较大的工程练练手吧
- 以正点原子STM32F767 Apllo开发板的GPIO为模板开始Demo
- 新建CMakeLists.txt和build目录
- 添加cmsis_gcc.h文件,是用gcc编译所需的头文件,一些宏也需要添加
经验记录
windows cmake没有生成 Makefile
- windows10默认CMake会生成MSVC解决方案。在构建目录中检查 .sln 文件
- 删除目录下CMakeCache.txt(如果有的话);执行cmake . -G "Unix Makefiles" ; 然后可以执行make
参考
CMake 语法 - 详解 CMakeLists.txt FILE的使用我是从这里找的
error: expected ‘(’ before ‘void’ __ASM void xxx gcc 编译正点原子的sys.c报错
总结
以上是生活随笔为你收集整理的CMakeList--->CMakeList的编写,cmake,平台通用项目构建工具的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 软件需求管理用例方法 pdf_企业内训“
- 下一篇: 物联网架构方案思考