【发布时间】:2016-09-21 12:11:36
【问题描述】:
我们正在为嵌入式 ARM/Linux 设备编写应用程序。使用交叉编译器、Eclipse 和 Ninja 在 Windows PC 上进行开发。 CMake 目前可以创建适合预期目的的构建脚本。
一旦项目(通过 Git)推送到服务器,我们就会在连接到网络的嵌入式设备上运行单元测试。
在我们在设备上尝试之前,我们正在尝试实现可以在 PC 上运行的单元测试。这意味着使用 MinGW GCC 本地构建 - 当然我们不能在 PC 上启动 ARM Linux 可执行文件。
即使我们切换工具链,启动 CMake 为 Ninja 重建规则集,或者创建两个构建目录,一个用于 PC,一个用于 ARM,问题仍然是 CMake 将尝试运行测试可执行文件,然后在构建期间,将在 ARM 版本上尝试单元测试。
我们如何配置构建(通过 CMake)来创建两者 - 而不是尝试在 PC 上运行交叉编译的构建?
【问题讨论】:
-
您能否添加一个 CMake 代码示例,说明您如何执行“运行测试可执行文件”?您是否将其添加为
add_custom_command(TARGET ... POST_BUILD ...)和/或add_test()?我认为在这两种情况下,只需在此特定命令周围加上if (NOT CMAKE_CROSSCOMPILING)|endif()就可以了。 -
@Florian:在顶级 CMakeLists.txt 中只有
ADD_SUBDIRECTORY(UnitTests)。然后在目录中有ExternalProject_Add(GMockDownload GIT_REPOSITORY "https://github.com/google/googletest.git" ...,它完成了剩下的工作。是的,if (NOT CMAKE_CROSSCOMPILING)在这里有帮助。似乎两个单独的构建目录和两次启动 cmake 是一种方式。不是最优的,因为我得到了两个 Eclipse 项目,而不仅仅是两个构建配置。
标签: build cmake cross-compiling ninja