【发布时间】:2018-01-12 11:01:13
【问题描述】:
到目前为止,我已经使用了有据可查的方法来交叉编译代码与 cmake,定义了一个工具链文件,就像在帖子的末尾一样。 然而,我想找到一种交叉编译的方法,而不是我的整个 C、C++ 项目,而只是某些目标。 例如,当您使用 google test 对嵌入式系统进行单元测试并与 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)
【问题讨论】:
-
你知道CMake的构建模式吗?在使用您的工具链文件进行配置后,从您的构建目录调用
cmake --build . --target <YOUR_TARGET_NAME> --config Debug将构建指定的目标和配置。不幸的是,您一次只能构建一个目标。 -
当你想运行单元测试时,你不应该用非嵌入式编译器重建所有目标吗? (不仅是 cpp 文件)。您将无法将嵌入式 C 与非嵌入式 cpp 链接。
-
@vre 你的意思是把关于交叉编译需求的细节放在像调试这样的自定义配置中吗?
-
@sruli 是的,你可以这样做。工具链文件提供了一些细节,其他细节由特殊目标描述。在不了解您的构建过程的情况下,我只是想确保您了解 CMake 的构建模式并且它可能适合您的需求。
标签: cmake embedded cross-compiling googletest googlemock