【问题标题】:How to define preprocessor definition for each configuration in CLion?如何为 CLion 中的每个配置定义预处理器定义?
【发布时间】:2019-07-13 19:20:40
【问题描述】:

我在CLion -> Settings -> Build, Execution, Deployment -> CMake 中有几个构建配置文件。无论我使用哪种编译器,如何为每个配置文件设置预处理器定义?

【问题讨论】:

    标签: c++ clion build-definition


    【解决方案1】:
    1. 转到Settings -> Build, Execution, Deployment -> CMake
    2. 选择要为其设置预处理器定义的配置文件。
    3. 写入CMake options 文本框:-DYOUR_DEFINE_VARIABLE=1
    4. 在您的 CMakeLists.txt 中写入以下内容:
    if (YOUR_DEFINE_VARIABLE)
        add_definitions(-DYOUR_DEFINE_VARIABLE=1)
    endif (YOUR_DEFINE_VARIABLE)
    

    【讨论】:

      【解决方案2】:

      我没有尝试过,但这应该可以工作

      if (CMAKE_CONFIGURATION_TYPES)
              string(TOLOWER "${CMAKE_CONFIGURATION_TYPES}" CMAKE_CONFIGURATION_TYPES_LOWER)
      else()
              string(TOLOWER "${CMAKE_BUILD_TYPE}" CMAKE_CONFIGURATION_TYPES_LOWER)
      endif()
      
      foreach(config ${CMAKE_CONFIGURATION_TYPES_LOWER})
              if (${config} MATCHES "debug")
                      #add preprocessor definition something like this bellow
                      add_definitions(-DFOO -DBAR ...)
              elseif(${config} MATCHES "release")
                      #and so on...
              endif()
      endforeach()
      

      因此,为了正确检查字符串,我们将构建配置类型转换为小写,然后检查类型中的 config 是否与此自定义配置类型匹配。如果是这样,那么我们可以添加一些预处理器定义等(

      【讨论】:

      • 它说什么?
      • ${CMAKE_CONFIGURATION_TYPES} 什么也不输出。我刚刚意识到CMake 选项卡包含的不是 cmake 配置,而是构建配置文件。
      • Global add_definitions 在现代 CMake 中是一种糟糕的风格。建议改用target_compile_definitions 等。
      • 不知道。谢谢!
      猜你喜欢
      • 2023-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-12
      • 2019-10-17
      相关资源
      最近更新 更多