用于交叉编译和 CMake 的预处理器宏的单元测试
Unit-tests for preprocessor macros for cross-compilation and CMake
我们的项目在多个平台上使用 CMake 构建,包括 Windows、Linux 和一些嵌入式操作系统上的交叉编译,使用自定义 CMake 工具链文件进行描述。
在交叉编译的情况下,我们必须维护预处理器宏集。
它以下列方式反映在 CMakeLists.txt
中。
文件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 上,除了库之外,还有 JSON 带有编译器调用的文件,由 EXPORT_COMPILE_COMMANDS
.
生成
你有什么建议?
我会用 #warning
宏来做,然后用 bash 来检查编译输出。然后你可以为这些文件设置 Werror
并进行编译时检查。或者简单地使用 #error
(感谢 KamilCuk)
另一种方法是深入检查有助于查看工具链是否具有线程或其他功能的二进制文件。
我们的项目在多个平台上使用 CMake 构建,包括 Windows、Linux 和一些嵌入式操作系统上的交叉编译,使用自定义 CMake 工具链文件进行描述。
在交叉编译的情况下,我们必须维护预处理器宏集。
它以下列方式反映在 CMakeLists.txt
中。
文件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 上,除了库之外,还有 JSON 带有编译器调用的文件,由 EXPORT_COMPILE_COMMANDS
.
你有什么建议?
我会用 #warning
宏来做,然后用 bash 来检查编译输出。然后你可以为这些文件设置 Werror
并进行编译时检查。或者简单地使用 #error
(感谢 KamilCuk)
另一种方法是深入检查有助于查看工具链是否具有线程或其他功能的二进制文件。