一、CMake简介
使用简单方便,可以跨平台,构建项目编译环境。尤其比直接写Makefile简单(在构建大型工程编译
时,需要写大量的文件依赖关系),可以通过简单的CMake生成负责的Makefile文件。
二、CMake安装
ubuntu上直接执行 sudo apt install cmake 安装完成,可以通过cmake -version查看其版本:
三、CMake的简单使用
cmake命令会执行目录下的CMakeLists.txt配置文件里面的配置项,一个基本的CMakeLists.txt的配置
文件内容如下:
cmake_minimum_required (VERSION 2.8) #要求cmake最低的版本号
project (demo) # 定义当前工程名字
set(CMAKE_BUILD_TYPE "Debug")#设置debug模式,如果没有这一行将不能调试设断点
set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} -g)#加入gdb调试设置
add_executable(main main.c)
#进入子目录下执行 CMakeLists.txt文件 这里的lib和tests里面都有可编译的代码文件
add_subdirectory(lib)
add_subdirectory(tests)
例一
生成一个main.cpp源文件,输出"hello world",然后在同级目录创建一个CMakeLists.txt文件,内容
如下:
cmake_minimum_required (VERSION 3.0) #要求cmake最低的版本号
project (demo) # 定义当前工程名字
set(CMAKE_BUILD_TYPE "Debug")#设置debug模式,如果没有这一行将不能调试设断点
add_executable(main main.cpp)
保存退出,执行cmake .命令,输出如下:
可以看到它其实是makefile的一层封装(我认为)因此还是会生成makefile文件,因此在此文件目录下执行makefile即可生成可执行文件main,执行如下:
因为生成了makefile文件,因此一切makefile的命令都是可以用的。
例二
如果需要编译的有多个源文件,可以都添加到add_executable(main main.cpp test.cpp)列表当中,
但是如果源文件太多,一个个添加到add_executable的源文件列表中,就太麻烦了,此时可以用
aux_source_directory(dir var)来定义源文件列表,使用如下:
cmake_minimum_required (VERSION 2.8)
project (demo)
aux_source_directory(. SRC_LIST) # 定义变量,存储当前目录下的所有源文件
add_executable(main ${SRC_LIST})
aux_source_directory()也存在弊端,它会把指定目录下的所有源文件都加进来,可能会加入一些我们
不需要的文件,此时我们可以使用set命令去新建变量来存放需要的源文件,如下
cmake_minimum_required (VERSION 2.8)
project (demo)
set( SRC_LIST
./main.cpp
./test.cpp)
add_executable(main ${SRC_LIST})
例三
一个完整的开源项目应该是如下的结构
-bin 存放最终的可执行文件
-build 存放编译中间文件
-include 头文件
--sum.h
--minor.h
-src 源代码文件
--sum.cpp
--minor.cpp
main.cpp
-CMakeLists.txt
CMakeLists.txt如下:
cmake_minimum_required (VERSION 2.8)
project (math)
# 设置cmake的全局变量
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)
#添加头文件路径,相当于makefile里面的-I
include_directories(${PROJECT_SOURCE_DIR}/include)
aux_source_directory (src SRC_LIST)
add_executable (main main.cpp ${SRC_LIST})
然后在build目录里面执行cmake .. 命令,这样所有的编译中间文件都会在build目录下,最终的可执行
文件会在bin目录里面
后面还有静态库与动态库的制作和使用cmake链接,这里不在赘述,需要的自行百度。
标签:executable,cmake,入门,源文件,add,cpp,CMake,main,快速 From: https://www.cnblogs.com/dwinternet/p/17852331.html