CMake¶
使用环境:
Centos Linux 8
编译程序¶
使用clang进行编译
首先来看一个简单的程序:
hello.cpp
#include <iostream>
#include "func.h"
int main() {
int arr[] = {1, 2, 3, 4};
print_array(arr, sizeof(arr)/sizeof(int)); //打印整型数组内容
return 0;
}
func.cpp
#include <iostream>
void print_array(int *arr, int size) {
if(!arr) return;
int i = 0;
for(; i < size; i++) {
std::cout<<arr[i]<<"";
}
std::endl;
}
在终端使用clang编译上述程序,可以使用如下命令:
生成a.out
文件,执行该文件:
可以得到如下结果:
Cmake编译文件¶
编译上述文件可以在本文件夹中写一个CMakeLists.txt
cmake_minimum_required(VERSION 3.10)
project(my_test)
set(CMAKE_VERBOSE_MAKEFILE ON)
add_definitions(-DHELLO_WORLD=2)
set(CMAKE_C_FLAGS "-std=c11")
set(CMAKE_CXX_FLAGS "-std=c++17")
include_directories("../") #这里将编译依赖的头文件放到了当前目录的上一级目录
## link_directories("library_dir") #这里编译不需要包含库文件
set(SRC_FILES hello.cpp func.cpp)
set(PROJECT_SOURCES ${SRC_FILE})
add_executable(${PROJECT_NAME} ${PROJECT_SOURCES})
##target_link_libraries(
## ${PROJECT_NAME} PRIVATE pthread
##) #这里由于编译时不需要依赖一些库
解释¶
cmake_minimum_required(VERSION 3.10)
表示cmake最小支持版本为3.10project(my_test)
表示设置该项目最后生成的目标文件为my_test
set(CMAKE_VERBOSE_MAKEFILE ON)
表示开启设置显示项目构建过程set(CMAKE_C_FLAGS "-std=c11")
表示设置C语言的版本为c11set(CMAKE_CXX_FLAGS "-std=c++17")
表示设置C++版本为c++17include_directories("../")
表示编译该目标文件的头文件在上一级目录link_directories("library_dir")
表示编译该目标文件的库文件在library_dir
这个目录下(像终端编译的-Lxxx(xxx表示库文件所在目录)
)set(SRC_FILES hello.cpp func.cpp)
表示设置源文件包含hello.cpp
和func.cpp
set(PROJECT_SOURCES ${SRC_FILES})
表示设置项目源文件为上述源文件add_executable(${PROJECT_NAME} ${PROJECT_SOURCES})
表示由项目源文件生成可执行目标文件target_link_libraries(${PROJECT_NAME} PRIVATE pthread)
表示链接生成目标文件的库文件名字(像终端编译的-lxxx(xxx表示库文件名)
)
编译执行¶
项目中,一般需要新建一个build
目录由于构建cmake项目:
上述执行完毕,会在build
目录下生成文件如下:
执行结果输出终端为: