到目前为止,我已经使用了记录良好的方法与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)
答案 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自动在我的环境变量中搜索编译器。
这可能不是最好的解决方案,但适用于我的项目