代码之家  ›  专栏  ›  技术社区  ›  wl2776

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

  •  0
  • wl2776  · 技术社区  · 6 年前

    我们的项目在多个平台上使用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)
    

    ... 我们还有其他嵌入式操作系统的类似文件。

    文件 克马克主义者。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上的单元测试轻松完成这项工作。

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

    你有什么建议?

    0 回复  |  直到 6 年前
        1
  •  1
  •   c4pQ    6 年前

    我愿意和你一起做 #warning 宏并使用bash检查编译输出。然后你可以设定 Werror 并获取编译时检查。或者干脆用 #error (感谢卡米尔库克)

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