导航

cmakelist

终于,又得自己写cmakelist了。

一句题外话,clion默认识别cmakelist。

之前跟着练手的博文是这个。

https://www.hahack.com/codes/cmake/

Demo 1

  • 0 文件结构
------ main.c
   |--- CMakeLists.txt
  • 1.1 文件名
CMakeLists.txt

 

  • 1.2 cmake最低版本信息
cmake_minimum_required(VERSION 2.8)
不同cmake支持的功能不同,理解为向下兼容,所以某个版本可以用,之后的版本均可以用
提供最低版本号
 
  • 1.3 项目名
project(Test1)

项目名称,目前没看到用的地方

 

  • 2 源码文件,链接到执行文件
add_executable(Test main.c)
执行文件的名字为Test,编译main.c得到
 
  • 3.1 生成cmake相关文件
#CMakeLists.txt同级目录
mkdir build
cd build
cmake ..
#此时cmake相关文件均在build文件夹,易于处理

生成CMakeCache.txt,CMakeFiles文件夹,Makefile,cmake_install.cmake

 

  • 3.2 make 
#同在build目录下,根据Makefile
make 
生成可执行文件Test
 
 
Demo 2
  • 0 文件结构
------ main.c
   |--- CMakeLists.txt
   |--- MathFunctions.c
   |--- MathFunctions.h
  • 1.1 多个源码文件,链接到执行文件 
add_executable(Test main.c MathFunctions.c)
#执行文件的名字为Test,编译main.c,MathFunctions.c

执行文件的名字为Test,编译main.c,MathFunctions.c

 

  • 2.1 将指定目录下的源码文件保存到变量
aux_source_directory(. CUR_C)

.为当前目录

查找当前目录下的所有源文件,并将名称保存到DIR_SRCS变量
 
  • 2.2 从变量读入源码文件,链接到执行文件
 
add_executable(Test ${CUR_C})

 

 Demo 3
  • 0 文件结构
------ main.c
   |--- CMakeLists.txt
   |--- math/
            |-------- CMakeLists.txt
            |-------- MathFunctions.c
            |-------- MathFunctions.h
 
  •  1.1 math目录下,CMakeLists.txt
aux_source_directory(. MATH_C)
#查找当前目录下的所有源文件,并将名称保存到MATH_C变量
#${MATH_C} = MathFunctions.c
 
add_library(MathFunctions ${MATH_C})
#生成链接库

 

  • 1.2 math目录下,测试:cmake
cmake .
 
生成CMakeFiles文件夹,Makefile,cmake_install.cmake
 
  •  1.3 math目录下,测试:make
make
生成libMathFunctions.a
 
  • 2.1 一级目录CMakeLists.txt,源码文件保存到变量
aux_source_directory(. CUR_C)
#查找当前目录下的所有源文件,并将名称保存到CUR_C变量

 

  • 2.2 一级目录CMakeLists.txt,包含头文件路径
include_directories("${PROJECT_SOURCE_DIR}/common")
#PROJECT_SOURCE_DIR,包含project命令的CMakeLists.txt所在文件夹
#CMAKE_SOURCE_DIR,顶级CMakeLists.txt所在文件夹

两个宏均为cmake定义

  • 2.3 一级目录CMakeLists.txt,添加math子目录
add_subdirectory(math)
#添加math子目录
#读该目录的CMakeLists.txt

 

  • 2.4 一级目录CMakeLists.txt,生成执行文件,链接一级目录下的库文件
 
add_executable(Test ${CUR_C})
#指定生成目标

 

  • 2.5 一级目录CMakeLists.txt,链接二级目录下的库文件
 
target_link_libraries(Test MathFunctions)
#添加链接库

 

  • 3.1 build目录下,cmake
一级目录下生成CMakeCache.txt,CMakeFiles文件夹,Makefile,cmake_install.cmake
math目录下生成CMakeFiles文件夹,Makefile,cmake_install.cmake

 

  • 3.2 不同CMakeLists.txt的变量命名问题
当前目录是否可以和上级目录变量同名:不可以
在解析一个CMakeList.txt时,又解析另一个CMakeList.txt文件,此时变量重叠;
而且第一个CUR_C有main.c,第二个使用CUR_C时,当前目录甚至找不到main.c,报错

 

  • 3.3 build目录下,make
math下生成libMathFunctions.a
当前目录下生成可执行文件Test
 
 
Demo 4 - draft
  • 0 文件结构
------ main.c
   |--- CMakeLists.txt
   |--- config.h.in
   |--- math/
            |-------- CMakeLists.txt
            |-------- MathFunctions.c
            |-------- MathFunctions.h
 
  • 1.1 config.h.in 定义宏
 
#cmakedefine USE_MTMATH

 

选择用自己的还是标准的mathFunc

 

  • 1.2 修改main.c
 
#include “config.h”
#ifdef USE_MYMATH
    #include “math/MathFunctions.h”
#else
    #include <math.h>
#endif
 
#ifdef USE_MYMATH
        //调用power
#else
        //调用pow
#endif

 

设置走向

posted on 2021-04-12 17:59  toughcactus  阅读(713)  评论(0编辑  收藏  举报