cmake-编译可执行程序

本例演示使用cmake编译一个可执行程序,并指定可执行程序的生成目录。

示例目录结构

|-- build
|-- CMakeLists.txt
|-- inc			# 头文件目录
|   `-- add.h
|-- lib
|-- out			# 可执行程序生成目录
`-- src			# 源文件目录
    |-- add.c
    `-- main.c

add.c

#include "add.h"

int add(int a, int b)
{
    return (a+b);
}

main.c

#include <stdio.h>
#include <stdlib.h>
#include "add.h"

int main(int argc, char** argv)
{
    int a = 1;
    int b = 2;
    printf("%d+%d=%d\n", a, b, add(a,b));

    return 0;
}

CMakeLists.txt

CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
cmake_policy(SET CMP0048 NEW)

project(test03 VERSION "1.2.3.4")

include_directories(./inc) # 指定头文件搜索路径,相当gcc的 -I

aux_source_directory(./src dir_srcs) # 获取源码文件
#message(${dir_srcs}) 可以打开注释查看dir_srcs中所包含的文件路径

set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ../out) # 指定可执行程序的输出目录

add_executable(add ${dir_srcs}) # 生成可执行程序

如果你看过前一篇文章,除了第6行和第11行外,其他的应该都知道其作用(PS:如果不清楚就看前一篇文章)。接下来重点解释第6行和第11行。

include_directories()

include_directories([AFTER|BEFORE] [SYSTEM] dir1 [dir2 ...])

Add the given directories to those the compiler uses to search for include files. Relative paths are interpreted as relative to the current source directory.

指定头文件搜索路径,相当gcc的 -I。你可以在build/CMakeFiles/add.dir/flags.make中发现C_INCLUDES = -I/your_path/./inc,即是通过include_directories(./inc)得到的。

AFTER|BEFORE即是控制头文件目录的添加顺序。例如,在调用include_directories命中之前,头文件的搜索路径是/usr/include;/usr/local/include,现在要新添加一个搜索路径/home/yudao/test/inc;如果指定AFTER(默认方式),那么就是在现有搜索路径进行追加(尾插),就变成/usr/include;/usr/local/include;/home/yudao/test/inc;如果指定BEFORE,那么就是在现有搜索路径进行前添加(头插),就变成/home/yudao/test/inc;/usr/include;/usr/local/include;如果指定SYSTEM,那么将添加的路径作为系统搜索路径。通常在编码时,系统搜索路径的头文件使用#include<>来包含,用户指定搜索路径的头文件使用#include ""来包含。

CMAKE_RUNTIME_OUTPUT_DIRECTORY

Where to put all the RUNTIME target files when built.

CMAKE_RUNTIME_OUTPUT_DIRECTORY是cmake的变量(variable),通过set()命令来指定’RUNTIME target files’的输出路径,'RUNTIME target files’可以理解为可执行文件。

set()

Set a normal, cache, or environment variable to a given value

说白了就是给变量赋值。

编译

cd build
cmake ..
make

最终会在out目录下生成一个add可执行程序。

执行 ./add 会打印 1+2=3

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: cmake-gui是一个图形界面工具,用于帮助配置交叉编译环境。交叉编译是将源代码从一种平台编译成在另一种平台上运行的可执行程序的过程。以下是使用cmake-gui来配置交叉编译环境的步骤: 1. 打开cmake-gui工具。 2. 在"Where is the source code"字段中输入源代码的路径。 3. 在"Where to build the binaries"字段中输入生成的可执行文件的路径。 4. 在"Generator"字段中选择要使用的交叉编译器。 5. 在"Specify toolchain file"字段中选择交叉编译工具链文件。 6. 单击"Configure"按钮,cmake-gui将自动检测交叉编译器和工具链文件,并在窗口中显示相关的设置选项。 7. 根据实际情况修改和配置生成选项,例如选择要构建的目标平台、设置编译器选项等。 8. 单击"Generate"按钮,cmake-gui将生成Makefile或其他构建系统所需的配置文件。 9. 在终端中进入生成的可执行文件路径,并执行构建命令(例如make),即可开始交叉编译。 10. 等待编译过程完成,生成的可执行程序将位于指定的二进制路径中。 使用cmake-gui进行交叉编译配置可以简化配置过程,提供了直观的图形界面操作,同时也可以让开发人员灵活地根据需求进行各种配置选项的设置,方便进行跨平台开发和调试。 ### 回答2: cmake-gui是一个基于图形界面的CMake配置工具,用于帮助开发者进行跨平台和交叉编译的配置。 交叉编译是指在一个主机上构建、编译和运行适用于另一个主机系统的程序。在进行交叉编译配置之前,首先需要确定目标主机的架构、操作系统和编译器等信息。 使用cmake-gui进行交叉编译配置的步骤如下: 1. 打开cmake-gui工具。 2. 在"Where is the source code"一栏中,输入项目的源代码路径。 3. 在"Where to build the binaries"一栏中,输入项目的构建路径。这里可以选择在当前工作空间内或者指定一个新的目录。 4. 点击"Configure"按钮,选择对应的生成器。在弹出的对话框中,根据目标主机的操作系统类型选择对应的生成器。例如,如果目标主机是使用GNU make系统,则选择"Unix Makefiles"生成器。 5. 在"Optional platform for generator"一栏中,填写目标主机所属的平台。例如,如果目标主机是使用armv7架构,则填写"armv7"。 6. 在"Optional toolset to use"一栏中,填写用于构建目标程序的工具集。这里可以选择在配置时指定编译器和工具链。 7. 点击"Finish"按钮,开始进行交叉编译的配置过程。 8. 在配置过程中,cmake-gui会根据所选择的生成器和目标主机的相关信息,分析项目的CMakeLists.txt文件,并生成相应的配置文件。如果配置过程中缺少依赖库或编译工具等,可以在cmake-gui的界面上进行相关设置。 9. 配置完成后,点击"Generate"按钮,即可生成对应的项目构建文件。 通过以上步骤,我们可以使用cmake-gui工具进行交叉编译配置,从而在不同的主机上构建和运行适用于目标主机系统的程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sif_666

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值