在 CMake 中启动主机和目标交叉编译构建

问题描述 投票:0回答:1

是否有一种方法来配置 CMake,以便单个

make
命令将启动主机和目标构建?我有一个项目要在目标平台上运行,但需要从需要在主机平台 (PC) 上运行的
generator
生成一些数据。从 CMake 的文档 和环顾四周,我需要一个 2 遍构建 - 首先主机创建生成器,然后是目标交叉编译构建。我的问题具体是如何通过 CMake 配置使用单个
make
命令启动 2 遍构建(不使用外部 bash 或 python 脚本)

我所知道的事情

  1. CMake 不允许在单个构建中更改工具链
  2. 几乎解决方案如下:如何指示 CMake 使用构建架构编译器这很好,除了我需要跳过使用外部脚本的第二步
  3. 如何分离交叉编译期间运行的内容或不运行的内容CMake - 本地编译并交叉编译相同的代码
  4. 据说可以使用 CMake 启动多个 CMake 构建如何在单个构建中使 CMake 针对多个平台
cmake cross-compiling
1个回答
3
投票

将我的评论变成答案

假设您有一个用于主机构建工具的

buildTool
子目录:

buildTools\CMakeLists.txt

cmake_minimum_required(VERSION 2.8)
project(BuildTools)

add_executable(genfoo genfoo.cpp)

然后你可以有一个主要的:

CMakeLists.txt

if (CMAKE_CROSSCOMPILING)
    set(_genfoo "bin/genfoo${CMAKE_EXECUTABLE_SUFFIX}")
    add_custom_command(
        OUTPUT ${_genfoo}
        COMMAND ${CMAKE_COMMAND} 
                    -DCMAKE_BUILD_TYPE:STRING="Release"
                    -DCMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE:PATH="${CMAKE_BINARY_DIR}/bin"
                    -B"bin"
                    -H"${CMAKE_SOURCE_DIR}/buildTools"
        COMMAND ${CMAKE_COMMAND} --build bin --config Release
    )
else()
    set(_genfoo genfoo)
    add_subdirectory(buildTools)
endif()

add_custom_command(
    OUTPUT foo.h
    COMMAND ${_genfoo}
    DEPENDS ${_genfoo}
)

add_executable(bar bar.cpp foo.h)
target_include_directories(bar PRIVATE ${CMAKE_BINARY_DIR})

参考文献

© www.soinside.com 2019 - 2024. All rights reserved.