使用 cmake
使用前注意 :
-
CMake是一种跨平台的构建系统,它用于管理软件构建过程,尤其适合多语言、多配置的项目。CMake不直接构建软件,而是生成特定构建工具(如Makefile或Visual Studio项目)所需的配置文件。
-
如果仅仅使用 qt 编程,没有必要使用 cmake,因为 qmake 管理 Qt 工程的专业性和自 动化程度比 cmake 要高很多。
-
如果你的工程只有几个文件,直接编写 Makefile 是最好的选择。
套用一个简单的cmake工程
这里不再解释复杂的语法 ,只给出 一个简单的工程, 参考文献 [1]中的demo4 ,
GitHub - ClangWU/CMake_Tutorial: The repositoy which contains 5 demos,elaborates how to write CMAKE in details.
首先是每一个目录 下都要有一个 CMakeLists.txt文件 ;
其次是工程目录运行:
mkdir build
cd build
cmake ../
make
cd bin
./demo4 4 2
建立 子目录 build; 进入到 build ; 生成makefile文件 ; 用make 编译 ; 进入生成的可执行文件 目录 ; 运行可执行文件 。
cmake 工程说明
工程根目录下的 CMakeLists.txt文件 ,指定工程名称,并添加2个子目录 :
CMAKE_MINIMUM_REQUIRED(VERSION 3.10)
PROJECT(demo3)
ADD_SUBDIRECTORY(./mylib)
ADD_SUBDIRECTORY(./src)
工程 src 目录下的 CMakeLists.txt文件 ,PROJECT_SOURCE_DIR 指工程代码 所在目录 ,PROJECT_BINARY_DIR 指编译发生的当前目录 。
第1句:头文件目录包含 当前工程所在目录下的 lib目录 ,
第2句:SET 目标二进制保存的目录 为当前工程编译发生的当前目录 下的 bin目录 ,
第3句:用于将指定目录下所有源文件 列表赋值给一个变量 DIR_SRCS,
第4句:基于源文件 生成可执行文件 :demo4, 源文件列表是${DIR_SRCS}
第5句:将目标文件demo4 链接到Mylib:
INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/mylib)
SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)
AUX_SOURCE_DIRECTORY(./ DIR_SRCS)
ADD_EXECUTABLE(demo4 ${DIR_SRCS})
TARGET_LINK_LIBRARIES(demo4 Mylib)
工程 lib 目录下的 CMakeLists.txt文件 , 添加库文件目录 ;设置库输出目录 ;定义库文件 的目标文件为 Mylib, 类型为静态库, ${DIR_LIB_SRCS} 为库文件列表 :
AUX_SOURCE_DIRECTORY(. DIR_LIB_SRCS)
SET(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib)
ADD_LIBRARY(Mylib STATIC ${DIR_LIB_SRCS})
用 makefile编写一个工程 模板
参考: Linux应用层开发,makefile万能通用模板_makefile 通用模板-CSDN博客
项目编写一个makefile文件, 通过make编译
1,创建一个项目目录 Linux_base_project
2,在目录中创建一个main.c,和add.c程序。
3,编写一个万能通用makefile文件。
4.看不同makefile里面的一些符号可以搜索对应的语法熟悉一下。
TARGET=main //目标文件
SRCS=$(wildcard *.c ./*/*.c) //通过wildcard 获取当前目录下全部.c文件,递归文件夹,赋值给SRCS变量
OBJS=$(patsubst %.c,%.o,$(SRCS) ) //通过patsubst将全部.c文件,替换为.o赋值OBJS
CC=gcc
$(TARGET):$(OBJS)
$(CC) -o $(TARGET) $(OBJS)
%.o:%.c
$(CC) -c $< -o $@ #$@表示目标文件,$<依赖.o
.PHONY:clean echo
echo:
@echo "source files: $(SRCS)"
@echo "object files: $(OBJS)"
clean:
rm $(OBJS)
cleanall:
rm $(OBJS) $(TARGET)
文档结构
好的文档结构 是成功的一半。
doc存放文档;res 资源 ,包括训练的图片;src 源码,config 配置信息,src主程序,modules自己写的模块代码,test测试模块代码的小程序,tool编写的小工具;third_party别人写的第三方库
/project# tree ./
./
├── build
├── doc
├── res
├── src
│ ├── CMakeLists.txt
│ ├── config
│ ├── modules
│ │ ├── CMakeLists.txt
│ │ ├── mymath.cpp
│ │ └── mymath.hpp
│ ├── src
│ │ ├── CMakeLists.txt
│ │ └── main.cpp
│ ├── test
│ └── tool
└── third_party
├── libA
└── libB
参考文献 :
[1] 【技术】手把手教你写CMake一条龙教程——421施公队Clang出品_哔哩哔哩_bilibili
[2] cmake使用示例与整理总结-CSDN博客