CMake简单使用

作为一个linux后现代程序员,对于远古时代的自动化构建工具make很是敬畏,但却真的没有那么大的勇气去写makefile,特别是当项目比较大的时,仅仅是写makefile就会把好端端的一个人搞残搞废。还好,同样有此体会的牛人们搞出了cmake,这样一来,makefile不用自己亲手写了,它也可以被自动生成了,而生成它的cmake则要简单的多。

一、从最简单的开始

假如我们用CMake来管理经典的"Hello world"程序,只有一个main.c文件;那么这样用CMake来管理它。

1.在main.c的同文件夹下创建文件CMakeLists.txt,并编辑。内容如下

cmake_minimum_required(VERSION 2.6)
project(Hello)
set(SRC_LIST main.c)
add_executable(main ${SRC_LIST})

2.在当前目录下运行cmake .

3.在当前目录下运行make

完成了上述步骤,在当前目录下就会生成可执行文件main和其他的CMake文件(这种文件会超级多)。

二、管理一个工程

如果不是小玩,而是想玩点大的,比如一个工程,那么也是可以的。现在我们就来看看CMake是如何玩转一个工程的。

1.下图是我的工程目录结构图

bin是用来放编译好的可执行文件

build是编译目录

CMakeLists.txt是工程顶层cmake规则文件

include存放项目所使用的头文件

lib存放编译好的库文件

src存放项目源代码

2.顶层CMakeLists.txt文件的内容

cmake_minimum_required(VERSION 3.6)
project(TASK)
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)
set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)
#set(CMAKE_RUNTIME_DIR ${CMAKE_BINARY_DIR})
set(CMAKE_INSTALL_PREFIX ${PROJECT_SOURCE_DIR})
include_directories(${CMAKE_SOURCE_DIR}/include)
link_directories(${CMAKE_SOURCE_DIR}/lib)
add_subdirectory(src)

3.我的项目源代码文件src结构

CMakeLists.txt是src目录下的cmake规则文件

main.c是项目主文件

sharememory是产生共享内存库文件的源代码文件

signal是产生信号量库文件的源代码文件

task是产生任务文件库文件的源代码文件

看看CMakeLists.txt文件的内容

set(SRC_LIST main.c)
add_subdirectory(task)
add_executable(main ${SRC_LIST})
target_link_libraries(main task)
install(TARGETS main RUNTIME DESTINATION bin)


对install命令稍作说明:

TARGETS后紧跟被安装文件的名字,

RUNTIME被安装文件类型是可执行程序

ARCHIVE被安装文件类型是静态链接库

SHARED被安装文件类型是动态链接库

DESTINATION被安装文件路径(这里只写了相对路径,是因为在顶层CMakeLists.txt文件中设置了安装文件的路径前缀)。


4.库文件task文件结构图

CMakeLists.txt是task文件下的cmake规则文件

task.c是库文件源代码

看看CMakeLists.txt内容

set(SRC_LIST task.c)
add_library(task STATIC ${SRC_LIST})
install(TARGETS task ARCHIVE DESTINATION ${CMAKE_SOURCE_DIR}/lib)

命令add_library生活动态库,STATIC说明生成库类型是静态类型,若要生成动态链接库使用SHARED


5.编译工程

进入工程的builid目下,运行cmake ..

在运行make

这样我们就可以在bin目录里看到生活的可执行文件,在lib目录里看到生成的库文件

需要说明的是,上面在build目录中编译的方式称作外部编译,而第一节讲的在项目根目录下编译的那种方式称为内部编译。

内部编译的坏处就是会在项目根目录产生非常多的对我们来说没有用的文件,这个是非常不爽的,所以通常使用外部外部编译

,将产生的文件扔进一个目录里。


三、CMake变量简要说明


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章