参考: https://www.hahack.com/codes/cmake/ui
1. 单目标文件
main.cspa
#include <stdio.h> #include <stdlib.h> double power(double base, int exponent) { int result = base; int i; if (exponent == 0) { return 1; } for(i = 1; i < exponent; ++i){ result = result * base; } return result; } int main(int argc, char *argv[]) { if (argc < 3){ printf("Usage: %s base exponent \n", argv[0]); return 1; } double base = atof(argv[1]); int exponent = atoi(argv[2]); double result = power(base, exponent); printf("%g ^ %d is %g\n", base, exponent, result); return 0; }
CMakeLists.txtcode
cmake_minimum_required (VERSION 2.8) # 指定最低的版本号 # 项目信息 project (Demo01_cmake) # 指定生成目标 add_executable(Demo_exe main.c) # Demo_exe为生成的可执行文件 main.c为依赖文件
而后 blog
cmake . # 生成makeFile文件
make # 执行make
2. 同一个目录,多个源文件
calc_power.hget
double power(double a, int b);
calc_power.cio
#include "calc_power.h" double power(double base, int exponent) { int result = base; int i; if (exponent == 0) { return 1; } for(i = 1; i < exponent; ++i){ result = result * base; } return result; }
main.cpp编译
#include <stdio.h> #include <stdlib.h> #include "calc_power.h" int main(int argc, char *argv[]) { if (argc < 3){ printf("Usage: %s base exponent \n", argv[0]); return 1; } double base = atof(argv[1]); int exponent = atoi(argv[2]); double result = power(base, exponent); printf("%g ^ %d is %g\n", base, exponent, result); return 0; }
CMakeLists.txttable
cmake_minimum_required (VERSION 2.8) # 项目信息 project (Demo2_cmake) # 指定生成目标 # add_executable(Demo2_cmake main.c calc_power.c) # 若是源文件多,这样写麻烦 # 该命令会查找指定目录下的全部源文件, 而后将结果存到指定变量名 # 以下: 查找当前目录下的全部源文件, 并将名称报错到 DIR_SRCS 变量 aux_source_directory(. DIR_SRCS) # 指定生成目标 # CMake 会将当前目录全部源文件名赋值给变量 DIR_SRCS # 再指示变量 DIR_SRCS 中源文件 编译成一个 Demo2_exe的可执行文件 add_executable(Demo2_exe ${DIR_SRCS})
再执行class
cmake . make
3. 多目录,多文件
main.crequire
#include <stdio.h> #include <stdlib.h> #include "./mymath/calc_power.h" int main(int argc, char *argv[]) { if (argc < 3){ printf("Usage: %s base exponent \n", argv[0]); return 1; } double base = atof(argv[1]); int exponent = atoi(argv[2]); double result = power(base, exponent); printf("%g ^ %d is %g\n", base, exponent, result); return 0; }
mymath的目录下CMakeLists.txt
# 查找当前目录下的全部源文件 # 并将名称保存到 DIR_LIB_SRCS 变量 aux_source_directory(. DIR_LIB_SRCS) # 生成连接库 # 使用add_library 将src目录中的源文件编译成静态连接库 add_library(calc_power $(DIR_LIB_SRCS))
main.c所在的目录下的CMakeLists.txt
# Make 最低版本号要求 cmake_minimum_required (VERSION 2.8) # 项目信息 project (Demo3_cmake) # 查找当前目录下的全部源文件 # 并将名称保存到 DIR_SRCS 变量 aux_source_directory(. DIR_SRCS) # 添加 math 子目录, 这样mymath目录下的 CMakeLists.txt文件和源代码也会被处理 add_subdirectory(mymath) # 指定生成目标 add_executable(Demo3_exe main.c) # 添加连接库, 指明可执行文件Demo3_exe 须要链接一个名为 calc_power的连接库 target_link_libraries(Demo3_exe calc_power)
而后:
cmake . make