用于交叉编译和CMake的预处理器宏的单元测试

Unit-tests for preprocessor macros for cross-compilation and CMake

本文关键字:处理器 单元测试 预处理 用于 CMake 交叉编译      更新时间:2023-10-16

我们的项目在多个平台上使用CMake构建,包括Windows、Linux和一些嵌入式操作系统上的交叉编译,使用自定义CMake工具链文件进行描述。

在交叉编译的情况下,我们必须维护预处理器宏集。

它以以下方式反映在CCD_ 1中。

文件embedded_os1.toolchain.cmake

set(CMAKE_SYSTEM_NAME Generic)
set(CMAKE_SYSTEM_PROCESSOR ARM)
set(CMAKE_C_COMPILER /path/to/cross-compiler)
# blah-blah-blah
set(embedded_OS1 TRUE)

我们也为其他嵌入式操作系统提供了类似的文件。

文件CMakeLists.txt

set(CMAKE_EXPORT_COMPILE_COMMANDS 1)
if(embedded_OS1)
add_definitions(-Dmacro1 -Dmacro2)
elseif(embedded_OS2)
add_definitions(-Dmacro3 -Dmacro4)
elseif(embedded_OS3)
add_definitions(-Dmacro1 -Dmacro4)
endif()

我想执行某种自动检查,以确保所有预处理器宏都设置正确。

我可以很容易地在Windows和Linux上进行单元测试。

但在嵌入式操作系统上不可能编译和运行可执行文件,我只能编译静态库,然后对其进行签名,放入固件映像等。我在PC上除了库之外,只有EXPORT_COMPILE_COMMANDS生成的带有编译器调用的JSON文件。

你有什么建议?

我会用#warning宏来做这件事,并用bash检查编译输出。然后您可以为这些文件设置Werror并进行编译时检查。或者简单地使用#error(感谢KamilCuk(

另一种方法是深入研究有助于查看工具链是否具有线程或其他功能的检查二进制文件。