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

时间:2017-02-28 10:55:05

标签: cmake cross-compiling

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

我知道的事情

  1. CMake不允许在单个版本中更改工具链
  2. 几乎像以下的解决方案:How to instruct CMake to use the build architecture compiler?除了我需要跳过使用外部脚本的第二步之外,这很好
  3. 如何在交叉编译期间分开运行的内容cmake - compile natively and crosscompile the same code
  4. 据推测,可以使用CMake How to make CMake targeting multiple plattforms in a single build
  5. 启动多个CMake构建

1 个答案:

答案 0 :(得分:1)

将我的评论转化为答案

假设您有一个用于主机构建工具的buildTool子目录:

<强>编译工具\的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})

<强>参考