文章目录视频教程康康这个Bilibili点击跳转,由于本文信息密度大,比较详细,可能略显繁琐,还请耐心阅读
CMakeList 语法精述
PROJECT 工程名SET 设置变量MESSAGE 打印信息ADD_EXECUTABLE 生成可执行文件ADD_SUBDIRECTORY 添加子目录ADD_LIBARY 输出库SET_TARGET_PROPERTIESINCLUDE_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变量
用来设置指定的变量
SET(SRC_LIST main.cpp test1.cpp test2.cpp)MESSAGE 打印信息
向终端输出用户自定义的信息包含三种信息
SEND_ERROR产生错误生成过程被跳过
SATUS生成前缀为- -的信息
FATAL_ERROR立即终止所有cmake过程
ADD_EXECUTABLE 生成可执行文件
生成可执行文件
ADD_EXECUTABLE(HELL main.cpp test1.cpp)
#也可以写成
ADD_EXECUTABLE(HELL ${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编译所需的头文件,一些宏也需要添加
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报错



