交叉编译 not a dynamic executable_第十八文:编译基础知识之cmake第二篇

本文详细介绍了如何在Windows环境下使用cmake配置交叉编译,以生成能在Linux上运行的可执行文件。内容涵盖cmake的基本用法、CMakeLists.txt的编写,以及在交叉编译过程中可能遇到的变量设置问题,如CMAKE_MAKE_PROGRAM、CMAKE_CXX_COMPILER和CMAKE_C_COMPILER等。
摘要由CSDN通过智能技术生成

声明:本文接着第十七文开始继续。

3.在windows上交叉编译liunx软件cmake环境配置

本文讲解的前提是你们的电脑上都已经装好了cmake和make软件了。

什么是交叉编译,笔者的理解就是在一个操作系统上,编译出运行在其他操作系统上运行的软件,这个过程就是交叉编译。

笔者目前的工作开发都是在windows上进行的,所以我们今天主要讲讲怎么在windows上配置cmake来编译出其他操作系统上运行的可执行文件。我们在上文已经讲过了编译就需要编译器,其实编译器也是一个可执行程序,那么在windows上编译就得有能够运行在windows上的编译器。这部分芯片提供者应该是要提供的。然后就是Cmakelists.txt的编写了。笔者为了测试,自己编写的CmakeLists.txt如下图:

393311d302758af6f9a6745b553b76e8.png

以上是一个特别特别基础的CmakeLists.txt了。

  1. cmake_minimum_required(VERSION 3.0.2)

    表示改cmake项目要求的最低版本号要求

  2. project(helloword C CXX RC)

    建立一个名为hello的camke工程,这个工程支持c,c++,rc语言(我也不知道什么是rc语言,我在编译cmake的时候出现了这个错误,所以我在这里加了)

  3. message(STATUS ${CMAKE_SYSTEM_NAME})

    这个是我加的一个调试信息CMAKE_SYSTEM_NAME表示交叉编译的时候,目标操作系统的名称。也就是说配置你编译的可执行文件是运行在什么机子上面的。

  4. set(${PROJECT_NAME}_PUBLIC_INCLUDES "")

    这里定义了一个变量,${PROJECT_NAME}_PUBLIC_INCLUDES来放一些头文件引用路径。其中${PROJECT_NAME}就是来获PROJECT_NAME指向的内容,这个变量值其实就是helloword。

  5. list(APPEND ${PROJECT_NAME}_PUBLIC_INCLUDES
        "${CMAKE_CURRENT_SOURCE_DIR}/inc"
    )

    这里相当于在原有${PROJECT_NAME}_PUBLIC_INCLUDES包含的路径的基础上,在加一个"${CMAKE_CURRENT_SOURCE_DIR}/inc"路径,其中CMAKE_CURRENT_SOURCE_DIR是指当前处理的cmakelist所在的路径。(这里注意下以后我们会讲到add_subdirectory,那这个命令会改变这个变量么?)

  6. include_directories(${${PROJECT_NAME}_PUBLIC_INCLUDES})

    这里是将头文件的包含目录告诉编译器。比如说有的时候我们.c文件中直接 #include “text.h”就行了,有的时候需要#include“test/inc/test.h”,写成什么样子,就得看你自己这个命令里传了什么样的路径给编译器。

  7. include("./src/src.cmake")

    就想.c可以包含.h,cmakelists.txt也能包含.cmake文件。这就可以把一个大的cmake项目分给各个模块了。我在总的cmake list里面包含各个模块的cmake就行了。

  8. add_executable(sky "${${PROJECT_NAME}_SOURCES}")

    这里是用后面包含的源文件生成一个名字为sky的可执行文件。

在这里我演示下在自己电脑上编译的效果:

79738d722da9551a64ee4641bb95a0e2.png

969b0da14b93308b55f6002d85d9f72a.png

我们来运行下sky.exe:

784c5b371e9a59c007b2a963d1a85640.png

注意:写好cmakelist之后,可能在cmakelist文件夹下运行cmake.exe会报错,这个时候需要设置一些变量:CMAKE_MAKE_PROGRAM,CMAKE_CXX_COMPILER,CMAKE_C_COMPILER。目前笔者主要碰到这几个量没设值就会报错。因为我生成的就是windows程序。对应的cmake系统变量都会自动设置成windows自带的。当交叉编译其他系统上运行的可执行文件的时候,可能很多默认为windows下的量,就需要手动配置了。这个我下章节说下笔者编译linux可执行文件的时候需要设置的变量。

另外一些基本的cmake指令,我们先把这些基础的弄好之后,笔者之后会慢慢把笔者经常遇到的稍微讲讲。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值