学了C语言居然还不会用CMake???
学过C语言之后,已经过了老长一段时间。女朋友在使用Clion以及别的操作系统命令行的时候,总是会用到gcc这个工具。但是,简单的单文件编译难以满足正常的需求,没错,又投来疑惑的目光。
咳咳。。。
CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。在安装CMake环境的时候,可以选择类似MinGW(Windows端)平台。具体的安装过程不在赘述。
简单入门
1.首先编写 CMakeLists.txt 文件,并保存在与 main.c 源文件同个目录下:
# CMake 最低版本号要求
cmake_minimum_required (VERSION 2.8)
# 项目信息,项目名称
project (Demo1)
# 指定生成目标,将名为 main.c 的源文件编译成一个名称为 Demo 的可执行文件
add_executable(Demo main.c)
2.之后,在当前目录执行 cmake .
,得到 Makefile 后再使用make
命令编译得到 Demo1 可执行文件
使用
./Demo
运行所得程序
单目录,多文件
# 目录结构
./Demo2
|
+--- main.cc
|
+--- MathFunctions.c
|
+--- MathFunctions.h
1.改写CMakeLists.txt
# CMake 最低版本号要求
cmake_minimum_required (VERSION 2.8)
# 项目信息
project (Demo2)
# 指定生成目标
add_executable(Demo main.c MathFunctions.c)
当文件中引用过多的外部文件,使用
aux_source_directory(<dir> <variable>)
将该目录下的文件都赋值到变量中,改写如下
# CMake 最低版本号要求
cmake_minimum_required (VERSION 2.8)
# 项目信息
project (Demo2)
# 查找当前目录下的所有源文件
# 并将名称保存到 DIR_SRCS 变量
aux_source_directory(. DIR_SRCS)
# 指定生成目标
add_executable(Demo ${DIR_SRCS})
多目录,多文件
# 目录结构
./Demo3
|
+--- main.c
|
+--- math/
|
+--- MathFunctions.c
|
+--- MathFunctions.h
分别在项目根目录 Demo3 和 math 目录里各编写一个 CMakeLists.txt 文件
使用命令
add_subdirectory
指明本项目包含一个子目录 math使用命令
target_link_libraries
指明可执行文件 main 需要连接一个名为MathFunctions
的链接库 。
# 根目录
# CMake 最低版本号要求
cmake_minimum_required (VERSION 2.8)
# 项目信息
project (Demo3)
# 查找当前目录下的所有源文件
# 并将名称保存到 DIR_SRCS 变量
aux_source_directory(. DIR_SRCS)
# 添加 math 子目录
add_subdirectory(math)
# 指定生成目标
add_executable(Demo main.c)
# 添加链接库
target_link_libraries(Demo MathFunctions)
使用命令
add_library
将src目录中的源文件编译为静态链接库
# 子目录
# 查找当前目录下的所有源文件
# 并将名称保存到 DIR_LIB_SRCS 变量
aux_source_directory(. DIR_LIB_SRCS)
# 生成链接库
add_library (MathFunctions ${DIR_LIB_SRCS})
CMake下使用gdb调试代码
在CMakeLists.txt中加入
SET(CMAKE_BUILD_TYPE "Debug")
SET(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g2 -ggdb")
SET(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O3 -Wall")
使用CMake重新编译
cmake -DCMAKE_BUILD_TYPE=Debug Path
在进入工程中,执行
make
,最后gdb Demo
进行代码调试
以上便是使用CMake的基本操作,当然,CMake还支持使用动态库编译等方式来搭建环境,有需要的话再加以阐述。
果然还是CMake大法好。。。