【问题标题】:CMake Set option ON in just one CMakeLists仅在一个 CMakeLists 中设置 CMake 选项
【发布时间】:2015-10-13 12:20:22
【问题描述】:

实际上,我有一个具有不同 CMakeLists 的项目:一个用于编译,一个用于每个“模块”的单元测试(带有 goole 测试)。我有这样的结构:

模块_1
--|src
--CMakeLists.txt // 用于编译模块 1
--测试
----|CMakeLists.txt // 用于模块 1 的单元测试

模块_2
--|src
--CMakeLists.txt // 用于模块 2 的编译
--测试
----|CMakeLists // 用于模块 2 的单元测试

现在,我的目标是为每个模块只制作一个 CMakeLists.txt,并在同一个 CMakeLists.txt 中进行编译和单元测试。因此,我在触发测试的 CMakeLists.txt(用于编译)中创建了一个 OPTION。

option(TEST_ENABLED
    "Tests Unitaires Core"
    OFF
)
if(TEST_ENABLED)
    set...
endif()

它适用于一个 CMakeLists。但是,如果我构建了所有模块,则会为每个模块激活该选项(希望您关注我)。

cmake -DTEST_ENABLED=ON -G"Unix Makefiles" ../module1

我使用带有一些 $variables 的服务器 (Jenkins) 触发编译,所以我只想激活主 CMakeLists 的选项(使用 cmake 命令行调用的那个)

我该怎么做?

如果您想了解更多信息,请告诉我

感谢您的帮助。

【问题讨论】:

    标签: unit-testing cmake


    【解决方案1】:

    选项和其他用户提供的参数是为项目全局设置的,因此它们会影响项目的所有部分。

    您可以为项目的不同部分使用不同的选项:

    module1/CMakeLists.txt

    option(TEST1_ENABLED
        "Test for module 1"
        OFF
    )
    
    ...
    

    或者,在测试的情况下,您可以使用单个用户提供的参数来枚举所有模块,应为其设置选项:

    CMakeLists.txt

    set(TESTS_LIST "" CACHE STRING "List of tests")
    

    module1/CMakeLists.txt

    list(module_index FIND "module1" ${TESTS_LIST})
    if(module_index EQUAL -1)
        set(TEST_ENABLED OFF) # No CACHE, so variable is local for the module1.
    else()
        set(TEST_ENABLED ON)
    endif()
    
    if(TEST_ENABLED)
        ...
    endif()
    

    可能的用法:

    cmake "-DTESTS_LIST=module1;module3" -G "Unix Makefiles" ..
    

    这将启用对module1module3 的测试,但不适用于module2

    【讨论】:

      【解决方案2】:

      关于测试,我最喜欢的方法是在两个条件下启用测试:

      • 变量TEST_ENABLEDON
      • 当前项目是cmake的主项目

      第二个条件可以用PROJECT_NAMECMAKE_PROJECT_NAME测试

      来源:https://stackoverflow.com/a/8587949/1380225

      示例:

      if(TEST_ENABLED AND ("${PROJECT_NAME}" STREQUAL "${CMAKE_PROJECT_NAME}"))
          ...
      endif()
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-09-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多