CMakeLists.txt
文件来定义项目的构建规则。通过命令行运行 cmake
和 make
命令来生成和编译项目。,,``bash,mkdir build,cd build,cmake ..,make,
``Linux CMake 编译指南
CMake是一个开源、跨平台的自动化构建工具,通过编写配置文件(CMakeLists.txt)来生成本地的Makefile,从而简化和标准化构建过程,本文将详细介绍如何在Linux环境下使用CMake进行项目编译。
一、安装CMake
我们需要在Linux系统上安装CMake,以Ubuntu 18.04为例,安装命令如下:
sudo apt install cmake
安装完成后,可以通过以下命令查看CMake版本,确保安装成功:
cmake --version
二、基本使用示例
1. 创建简单的C程序
我们将从最简单的例子开始,创建一个名为main.c
的文件,内容如下:
#include <stdio.h> int main(void) { printf("Hello, World! "); return 0; }
在同一目录下创建一个名为CMakeLists.txt
的文件,内容如下:
cmake_minimum_required (VERSION 2.8) project (demo) add_executable(main main.c)
cmake_minimum_required (VERSION 2.8)
:指定CMake的最低版本要求。
project (demo)
:定义项目名称为demo
。
add_executable(main main.c)
:表示要生成一个名为main
的可执行文件,源文件为main.c
。
2. 编译并运行
在终端中切换到main.c
所在的目录,然后执行以下命令:
cmake .
此命令会生成一个Makefile
文件及其他一些临时文件,执行以下命令进行编译:
make
编译成功后,会生成一个名为main
的可执行文件,运行该文件:
./main
输出应为:
Hello, World!
三、多源文件项目
当项目中包含多个源文件时,可以在CMakeLists.txt
中列出所有源文件,我们在项目中添加两个新文件:testFunc.c
和testFunc.h
。
1. 文件结构
├── CMakeLists.txt ├── main.c ├── testFunc.c └── testFunc.h
2. 文件内容
testFunc.c
:
#include <stdio.h> #include "testFunc.h" void func(int data) { printf("data is %d ", data); }
testFunc.h
:
#ifndef _TEST_FUNC_H_ #define _TEST_FUNC_H_ void func(int data); #endif
修改main.c
,调用func
函数:
#include <stdio.h> #include "testFunc.h" int main(void) { func(100); return 0; }
修改CMakeLists.txt
:
cmake_minimum_required (VERSION 2.8) project (demo) add_executable(main main.c testFunc.c)
重新执行cmake .
和make
命令,然后运行生成的可执行文件main
,输出应为:
data is 100
3. 使用变量管理源文件
如果源文件数量较多,可以使用变量来管理,我们在项目中再添加两个文件:testFunc1.c
和testFunc1.h
。
4. 更新后的文件结构
├── CMakeLists.txt ├── main.c ├── testFunc.c ├── testFunc.h ├── testFunc1.c └── testFunc1.h
5. 更新后的文件内容
testFunc1.c
:
#include <stdio.h> #include "testFunc1.h" void func1(int data) { printf("data is %d ", data); }
testFunc1.h
:
#ifndef _TEST_FUNC1_H_ #define _TEST_FUNC1_H_ void func1(int data); #endif
修改main.c
,调用func1
函数:
#include <stdio.h> #include "testFunc.h" #include "testFunc1.h" int main(void) { func(100); func1(200); return 0; }
修改CMakeLists.txt
,使用变量管理源文件:
cmake_minimum_required (VERSION 2.8) project (demo) aux_source_directory(. SRC_LIST) add_executable(main ${SRC_LIST})
重新执行cmake .
和make
命令,然后运行生成的可执行文件main
,输出应为:
data is 100 data is 200
四、不同目录下的多源文件项目
对于较大的项目,通常会将代码按功能分类放在不同的目录下,下面是一个示例项目结构:
├── CMakeLists.txt ├── main.c └── test_func ├── CMakeLists.txt ├── testFunc.c └── testFunc.h └── test_func1 ├── CMakeLists.txt ├── testFunc1.c └── testFunc1.h
1. 文件内容
test_func/testFunc.c
:
#include <stdio.h> #include "testFunc.h" void func(int data) { printf("data is %d ", data); }
test_func/testFunc.h
:
#ifndef _TEST_FUNC_H_ #define _TEST_FUNC_H_ void func(int data); #endif
test_func1/testFunc1.c
:
#include <stdio.h> #include "testFunc1.h" void func1(int data) { printf("data is %d ", data); }
test_func1/testFunc1.h
:
#ifndef _TEST_FUNC1_H_ #define _TEST_FUNC1_H_ void func1(int data); #endif
修改main.c
,调用func
和func1
函数:
#include <stdio.h> #include "test_func/testFunc.h" #include "test_func1/testFunc1.h" int main(void) { func(100); func1(200); return 0; }
根目录下的CMakeLists.txt
:
cmake_minimum_required (VERSION 2.8) project (demo) add_subdirectory(test_func) add_subdirectory(test_func1) add_executable(main main.c) target_link_libraries(main testFunc testFunc1)
test_func/CMakeLists.txt
:
add_library(testFunc testFunc.c)
test_func1/CMakeLists.txt
:
add_library(testFunc1 testFunc1.c)
2. 编译并运行
在终端中切换到项目根目录,执行以下命令:
mkdir build && cd build cmake .. make
编译成功后,运行生成的可执行文件main
,输出应为:
data is 100 data is 200
五、常见问题解答(FAQs)
Q1:如何重新生成可执行文件?
A1:在编译过程中,如果修改了源代码或配置文件,可以重新运行make
命令来重新生成可执行文件,如果需要清除之前生成的所有文件,可以使用make clean
命令。
make clean make
以上就是关于“linux cmake 编译”的问题,朋友们可以点击主页了解更多内容,希望可以够帮助大家!