交叉编译的方法仅在CMake项目中定义("某些")目标

时间:2018-01-12 11:01:13

标签: cmake embedded cross-compiling googletest googlemock

到目前为止,我已经使用了记录良好的方法与cmake交叉编译代码,定义了一个像帖子末尾的工具链文件。 然而,我想找到一种交叉编译的方法,而不是我的整个C,C ++项目,而只是某些目标。 例如,当您使用谷歌测试进行嵌入式系统的单元测试并使用CMAKE协调所有内容时,就可以使用这些用例。 任何人都可以提供参考,链接或最小的例子来解决这个问题吗?

我不想做的是为不同的架构定义两次目标,我更喜欢定义工具链文件,并以某种方式将其传递给相应的CMakeLists.txt或目标。

这是一个最小工具链文件的示例,因为我将其用于cmake项目的全局配置。

SET(CMAKE_SYSTEM_NAME Generic)

SET(CMAKE_C_COMPILER   ..)
SET(CMAKE_CXX_COMPILER ..)
SET(CMAKE_C_COMPILER   C:\,,,.exe)
SET(CMAKE_CXX_COMPILER C:\,,,.exe)

SET(CMAKE_FIND_ROOT_PATH  .\build\ghs )

# adjust the default behaviour of the FIND_XXX() commands:
# search headers and libraries in the target environment, search 
# programs in the host environment
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)

1 个答案:

答案 0 :(得分:0)

我有一个项目,我希望能够在unit_test和crossCompile之间进行选择。这是我的cmakelist来源:

if(APP_TYPE STREQUAL "PROJ_UNIT_TEST")
    #compiler choice
    set( ENV{CC} ${CM_ECLIPSE_HOME}/../../MinGW/bin/gcc.exe)


else()
    #CC has to be set before project() that will search for the compiler 
    #this is deprecated : CMAKE_FORCE_C_COMPILER(arm-none-eabi-gcc GNU)
    set( ENV{CC} ${CM_ECLIPSE_HOME}/../../GNU\ Tools\ ARM\ Embedded/6-2016-q4-major/bin/arm-none-eabi-gcc.exe)

我们传递APP_TYPE参数以在两个选项之间进行选择。我不使用工具链文件,而是让cmake自动在我的环境变量中搜索编译器。

这可能不是最好的解决方案,但适用于我的项目