CMake----从入门到热爱(一)

CMake与Make最简单直接的区别

写程序大体步骤为:

1.用编辑器编写源代码,如.c文件。

2.用编译器编译代码生成目标文件,如.o。

3.用链接器连接目标代码生成可执行文件,如.exe。

但如果源文件太多,一个一个编译时就会特别麻烦,于是人们想到,为什么不设计一种类似批处理的程序,来批处理编译源文件呢,于是就有了make工具,它是一个自动化编译工具,你可以使用一条命令实现完全编译。但是你需要编写一个规则文件,make依据它来批处理编译,这个文件就是makefile,所以编写makefile文件也是一个程序员所必备的技能。

对于一个大工程,编写makefile实在是件复杂的事,于是人们又想,为什么不设计一个工具,读入所有源文件之后,自动生成makefile呢,于是就出现了cmake工具,它能够输出各种各样的makefile或者project文件,从而帮助程序员减轻负担。但是随之而来也就是编写cmakelist文件,它是cmake所依据的规则。所以在编程的世界里没有捷径可走,还是要脚踏实地的。

所以流程如下:

CMake----从入门到热爱(一)_第1张图片

Cmake介绍

cmake要求项目工程主目录和所有存放源代码的子目录都要编写CMakeLists.txt文件。

变量设置 变量读取
set(key value) ${key}

IF控制语句中变量直接使用变量名,获取环境变量设置ENV{VAR}

通过示例进行说明
#1.cmake verson,指定cmake最低版本,建议写,防止功能不支持 
cmake_minimum_required(VERSION 3.2)

#2.project name,指定项目的名称,一般和项目的文件夹名称对应
#设置变量  语法:set( ... [PARENT_SCOPE])
SET(PROJECT_NAME test)

#指定项目名称 语法:project(projectname [cxx] [c] [java]) 不指定语言默认支持所有语言
PROJECT(${PROJECT_NAME})

#3.head file path,头文件目录,可以多个目录
INCLUDE_DIRECTORIES(include)

#4.source directory,源文件目录,只能一个目录
AUX_SOURCE_DIRECTORY(src DIR_SRCS)

#5.set environment variable,设置环境变量,编译用到的源文件全部都要放到这里,否则编译能够通过,但是执行的时候会出现各种问题,比如"symbol lookup error xxxxx , undefined symbol",可有可无
SET(TEST_MATH ${DIR_SRCS})

#调试打印变量值
MESSAGE(STATUS "src:" ${DIR_SRCS})

#6.add executable file,添加要编译的可执行文件,第二个参数为
#生成可执行文件:add_executable( [source1] [source2 ...])
#生成库:add_library( [STATIC | SHARED | MODULE] [source1] [source2 ...])  默认静态库
ADD_EXECUTABLE(${PROJECT_NAME} ${TEST_MATH})

#7.add link library,添加可执行文件所需要的库,比如我们用到了libm.so(命名规则:lib+name+.so),就添加该库的名称。将库与执行文件进行链接
TARGET_LINK_LIBRARIES(${PROJECT_NAME} m)

创建build文件夹
mkdir build
cd build
cmake ..
make
就可以看到build下有test执行文件
如果源文件在多个目录中,需要编写多个CMakeLists.txt

主文件中添加
#语法: ADD_SUBDIRECTORY(source_dir [binary_dir] [EXCLUDE_FROM_ALL])
ADD_SUBDIRECTORY(subdir)

子文件
AUX_SOURCE_DIRECTORY(. DIR_TEST1_SRCS)
ADD_LIBRARY(Test ${DIR_TEST1_SRCS})

添加链接目录,区别去target_link_libraries,指定链接目录

LINK_DIRECTORIES

预定义的变量

CMAKE_CURRENT_SOURCE_DIR:当前CMakeLists.txt所在文件夹
PROJECT_BINARY_DIR:外部构建中,指的是build目录
PROJECT_SOURCE_DIR:项目所在目录
EXECUTABLE_OUTPUT_PATH:设置执行文件输出路径
LIBRARY_OUTPUT_PATH :设置库输出路径

更过查看:https://cmake.org/cmake/help/v3.14/manual/cmake-commands.7.html

 
 
 
 

参考地址:

https://blog.csdn.net/weixin_42491857/article/details/80741060

你可能感兴趣的:(编译配置,cmake)