如何在Linux系统下使用CMake进行项目编译?

在 Linux 上使用 CMake 编译项目,首先需要编写一个 CMakeLists.txt 文件来定义项目的构建规则。通过命令行运行 cmakemake 命令来生成和编译项目。,,“bash,mkdir build,cd build,cmake ..,make,

Linux CMake 编译指南

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的最低版本要求。

linux cmake 编译

project (demo):定义项目名称为demo

add_executable(main main.c):表示要生成一个名为main的可执行文件,源文件为main.c

2. 编译并运行

在终端中切换到main.c所在的目录,然后执行以下命令:

cmake .

此命令会生成一个Makefile文件及其他一些临时文件,执行以下命令进行编译:

make

编译成功后,会生成一个名为main的可执行文件,运行该文件:

./main

输出应为:

linux cmake 编译
Hello, World!

三、多源文件项目

当项目中包含多个源文件时,可以在CMakeLists.txt中列出所有源文件,我们在项目中添加两个新文件:testFunc.ctestFunc.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.ctestFunc1.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,调用funcfunc1函数:

#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 编译”的问题,朋友们可以点击主页了解更多内容,希望可以够帮助大家!

原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/1282965.html

本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。

(0)
未希新媒体运营
上一篇 2024-11-10 13:35
下一篇 2024-11-10 13:36

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

产品购买 QQ咨询 微信咨询 SEO优化
分享本页
返回顶部
云产品限时秒杀。精选云产品高防服务器,20M大带宽限量抢购 >>点击进入