栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

CMakeList--->CMakeList的编写,cmake,平台通用项目构建工具

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

CMakeList--->CMakeList的编写,cmake,平台通用项目构建工具

视频教程康康这个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变量 _BINARY_DIR与 _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(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编译所需的头文件,一些宏也需要添加
经验记录 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报错

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/767555.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号