大家好,欢迎来到IT知识分享网。
目录
1、Cmake简介
2、安装CMake
首先,需要安装CMake。在Linux设备可以使用sudo apt-get install cmake。或者从CMake官网下载适合操作系统的安装程序。安装完成后,可以在终端中运行以下命令来检查CMake是否安装成功:
cmake --version
如果成功安装,将看到CMake的版本信息。
3、CMakeLists.txt
cmake的核心就是CMakeLists.txt
文件,(注意:CMakeLists.txt
文件名严格区分大小写,确保文件名准确无误)告诉CMake如何构建项目。通过CMakeLists.txt可以决定工程文件生成二进制文件,动态库,静态库文件,以及链接各种库文件,十分灵活好用,以下几种实例都会讲到。
4、单目录简单实例
4.1、CMakeLists.txt
cmake_minimum_required(VERSION 3.16) PROJECT (MyCProject) # 设置编译选项,加入-g可以gdb调试 SET(CMAKE_CXX_FLAGS "-g") SET(CMAKE_C_FLAGS "-g") # 添加源文件 file(GLOB SOURCES "src/*.c") # 添加头文件目录 #INCLUDE_DIRECTORIES(../include) # 生成可执行文件 add_executable(src ${SOURCES})
以上的CMakeLists.txt
文件做了以下事情:
- CMakeLists.txt不区分函数名字母大小写,一般一个函数都用大写或者都用小写
- #号用于注释语句
- cmake_minimum_required( )指定CMake的最低版本。
- PROJECT( ) 定义项目名称。
- SET(CMAKE_CXX_FLAGS “-g”)设置C语言标准,此外set(A B)函数还用于赋值将B赋予A。
- 使用file()函数将所有在
src/
目录下的.c
文件赋给变量SOURCES
。- 使用include_directories()函数添加头文件目录。
- 链接库文件路径LINK_LIBRARIES(xxxx.a xxxx.so)
- 链接库文件LINK_DIRECTORIES(. ./lib/ . ./build/xxx.a . ./build/xxx.so)
- 最后,使用add_executable()函数生成可执行文件,将源文件
${SOURCES}
执行生成src可执行程序。- 生成静态库文件 ADD_LIBRARY(xxx STATIC ${SRC_LIST})生成静态库文件xxx.a
- 生成动态库 ADD_LIBRARY(xxx SHARED ${SRC_LIST})生成动态库文件xxx.so
4.2、构建bulid
内部构建
外部构建
cmake ..
这将使用根目录中的CMakeLists.txt
文件来配置项目。接下来,运行以下命令来编译项目:
make
这将生成可执行文件MyCProject
,可以在build/
目录下找到它。
4.3、运行C语言程序
现在,可以在终端中运行的C语言程序:
./src
5、多目录文件简单实例
test-2/ CMakeLists.txt src/ CMakeLists.txt main.c utils.c include/ utils.h build/
CMakeLists.txt
是CMake的配置文件,用于告诉CMake如何构建项目。
-此工程为多个CMakeLists.txt文件,每个CMakeLists.txt文件管理此目录下的源文件,并且上级CMakeLists.txt可以递归管理子目录src/
包含的C源代码文件。include/
包含的头文件。build/
是构建输出目录,用于存放生成的可执行文件和中间文件,可以按照自己的需求删除和手动创建。
5.1、根目录CMakeLists.txt
cmake_minimum_required(VERSION 3.16) PROJECT (ZPJ_TEST_1) SET(CMAKE_CXX_FLAGS "-g") SET(CMAKE_C_FLAGS "-g") ADD_SUBDIRECTORY(./src ./bin)
5.2、源文件目录
CMakeLists.txt
cmake_minimum_required(VERSION 3.16) file(GLOB SRC_LIST "./*.c") include_directories(../include) ADD_EXECUTABLE(src ${
SRC_LIST})
src/main.c
#include <stdio.h> #include "utils.h" int main() {
printf("Hello, CMake!\n"); int result = add(2, 3); printf("2 + 3 = %d\n", result); return 0; }
src/utils.c
#include "utils.h" int add(int a, int b) {
return a + b; }
5.3、utils.h
#ifndef UTILS_H #define UTILS_H int add(int a, int b); #endif
5.4、创建build
6、生成库文件和链接外部库文件
cmake_minimum_required(VERSION 3.16) PROJECT (ZPJ_TEST_1) SET(CMAKE_CXX_FLAGS "-g") SET(CMAKE_C_FLAGS "-g") ADD_SUBDIRECTORY(./utils/ ./utils/) ADD_SUBDIRECTORY(./src ./bin)
src
cmake_minimum_required(VERSION 3.16) file(GLOB SRC_LIST "./*.c") include_directories(../include) LINK_DIRECTORIES( ../build/utils) LINK_LIBRARIES(utils.so) ADD_EXECUTABLE(src ${
SRC_LIST})
utils
cmake_minimum_required(VERSION 3.16) file(GLOB SRC_LIST "./*.c") include_directories(../include) ADD_LIBRARY(utils SHARED ${
SRC_LIST})
7、注意
不一定每个目录里都要有CMakeLists.txt文件,只要CMakeLists.txt里的各个路径引用正确即可
CMakeLists.txt中还有许多函数和宏,在大型项目组十分常见,可以自行查找,本文不再加以赘述。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/130857.html