我们正在为一个嵌入式ARM/Linux设备编写应用程序。开发在Windows PC上进行,使用交叉编译器、Eclipse和Ninja。CMake目前可以创建适用于预期目的的构建脚本。
一旦项目通过Git推送到服务器上,我们就可以在连接到网络的嵌入式设备上运行单元测试。
我们试图实现在PC上运行单元测试,然后再尝试在设备上运行它们。这意味着需要使用MinGW GCC本地构建,当然不能在PC上启动ARM Linux可执行文件。
即使我们切换工具链,启动CMake重新构建Ninja的规则集,或者创建两个构建目录,一个用于PC,一个用于ARM,问题仍然存在,即CMake将尝试运行一个测试可执行文件,并在构建期间尝试在ARM构建上运行单元测试。
如何通过CMake配置构建以创建两个版本,并且不尝试在PC上运行交叉编译的版本?
一旦项目通过Git推送到服务器上,我们就可以在连接到网络的嵌入式设备上运行单元测试。
我们试图实现在PC上运行单元测试,然后再尝试在设备上运行它们。这意味着需要使用MinGW GCC本地构建,当然不能在PC上启动ARM Linux可执行文件。
即使我们切换工具链,启动CMake重新构建Ninja的规则集,或者创建两个构建目录,一个用于PC,一个用于ARM,问题仍然存在,即CMake将尝试运行一个测试可执行文件,并在构建期间尝试在ARM构建上运行单元测试。
如何通过CMake配置构建以创建两个版本,并且不尝试在PC上运行交叉编译的版本?
CMAKE_CROSSCOMPILING
。例如,请参阅 如何指示 CMake 使用构建架构编译器?。 - Florianadd_custom_command(TARGET ... POST_BUILD ...)
还是add_test()
来添加的呢?我认为在这两种情况下,只需在特定命令周围加上if (NOT CMAKE_CROSSCOMPILING)
|endif()
即可解决问题。 - FlorianADD_SUBDIRECTORY(UnitTests)
。然后在该目录中,有ExternalProject_Add(GMockDownload GIT_REPOSITORY "https://github.com/google/googletest.git" ...
它完成了其余的工作。是的,if (NOT CMAKE_CROSSCOMPILING)
在这里很有帮助。看起来两个单独的构建目录并且两次启动cmake是正确的方法。虽然不是最优的,因为我得到了两个Eclipse项目而不仅仅是两个构建配置。 - SF.