参考b站
421施公队 手把手教你写Cmake
cmake基础知识
- 一键从c文件生成可执行文件
- 生成Makefile适应不同的的平台
ubuntu gcc
- 预处理 gcc -E main.c -o main.l(-o 指定生成文件的名称) —>main.c main.l
- 编译 gcc -S main.l -->main.l main.c main.s
- 汇编 gcc -c main.s —>main.l main.c main.s main.o
- 链接 gcc main.o -o main -->main.l main.c main.s main.o main
- 执行./main
通过Makefile
- 代替冗长的gcc过程
- 通过make命令即可执行一套gcc操作
单目录单文件
CMAKE_MINIMUM_REQUIRED(VERSION 3.X) # 声明cmake的最低版本
PROJECT(demo) # 指定工程名称
ADD_EXECUTABLE(demo main.cpp) # 生成可执行文件
- cmake ./ # 生成Makefile
- make -j4 # 多(4)线程编译
单目录多文件
- 编写CMakeLists.txt (只需要在ADD_EXECUTABLE后添加所有的依赖)
CMAKE_MINIMUM_REQUIRED(VERSION 3.X) # 声明cmake的最低版本
PROJECT(demo) # 指定工程名称
ADD_EXECUTABLE(demo main.cpp lib.cpp ...) # 生成可执行文件
- 或者使用AUX_SOURCE_DIRECTORY(dir name) #把dir里面的所有源文件贮存到name变量中
CMAKE_MINIMUM_REQUIRED(VERSION 3.X) # 声明cmake的最低版本
PROJECT(demo) # 指定工程名称
AUX_SOURCE_DIRECTORY(./ DIR_SRCS) #把dir里面的所有源文件贮存到name变量中
ADD_EXECUTABLE(demo ${DIR_SRCS}) # 生成可执行文件
多目录多文件
-
tree demo
-
demo.cpp -
CMakeLists.txt(2) -
mylib
-
CMakeLists.txt(1) -
mymath.cpp -
mymath.hpp -
编写CMakeLists.txt(1) AUX_SOURCE_DIRECTORY(./ DIR_SRCS)
ADD_LIBRARY(Mylib STATIC/SHARED ${DIR_SRCS}) #添加静/动态库
-
编写CMakeLists.txt(2) CMAKE_MINIMUM_REQUIRED(VERSION 3.X) # 声明cmake的最低版本
PROJECT(demo) # 指定工程名称
ADD_SUBDIRECTORY(./mylib) # 向当前工程添加存放源文件的子目录
AUX_SOURCE_DIRECTORY(./ DIR_SRCS) #把dir里面的所有源文件贮存到name变量中
ADD_EXECUTABLE(demo ${DIR_SRCS}) # 生成可执行文件
TARGET_LINK_LIBRARY(demo Mylib) #为demo添加需要连接的共享库
标准多目录多文件(build)
-
tree demo
-
build -
mylib
-
CMakelists.txt(3) -
mymath.cpp -
mymath.hpp -
CMakelists.txt(2) -
src
- demo.cpp
- CMakeLists.txt(1)
-
编写CMakeLists.txt(1)
INCLUDE_DIRECTORY(${PROJECT_SOURCE_DIR}/mylib) # 向工程添加特定的头文件搜索路径 ${PROJECT_SOURCE_DIR}根目录路径 相当于.
AUX_SOURCE_DIRECTORY(./ DIR_SRCS) #把dir里面的所有源文件贮存到name变量中
ADD_EXECUTABLE(demo ${DIR_SRCS}) # 生成可执行文件
TARGET_LINK_LIBRARY(demo Mylib) #为demo添加需要连接的共享库
AUX_SOURCE_DIRECTORY(./ DIR_SRCS)
ADD_LIBRARY(Mylib STATIC/SHARED ${DIR_SRCS}) #添加静/动态库
CMAKE_MINIMUM_REQUIRED(VERSION 3.X) # 声明cmake的最低版本
PROJECT(demo) # 指定工程名称
ADD_SUBDIRECTORY(./mylib) # 向当前工程添加存放源文件的子目录
ADD_SUBDIRECTORY(./src)
- cd build/
- cmake … # …表示在build中生成上一个目录的Makefile
- make
设置文件的输出路径:
库文件
- SET(LIBRARY_OUTPUT_PATH ${PROJECT_BINART_DIR}/lib)
- PROJECT_BINART_DIR为指定的编译路径 这里为build
可执行文件
- SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINART_DIR}/bin)
VSCode调试
-
修改上一例的CMakeLists.txt(2) CMAKE_MINIMUM_REQUIRED(VERSION 3.X) # 声明cmake的最低版本
PROJECT(demo) # 指定工程名称
ADD_SUBDIRECTORY(./mylib) # 向当前工程添加存放源文件的子目录
ADD_SUBDIRECTORY(./src)
add_definitions(-std=c++11)
set(CMAKE_BUILD_TYPE "Debug")
set(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -00 -Wall -g -ggbd")
set(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -03 -Wall ")
-
cmake make 后点击run/debug 弹出的launch.json 修改“program”为可执行文件
|