【问题标题】:Passing the argument to CMAKE via command prompt通过命令提示符将参数传递给 CMAKE
【发布时间】:2012-10-05 12:10:47
【问题描述】:

我的项目有一个生成文件,并且我正在传递一些参数,并基于该参数设置一些标志。我能够做到这一点。但现在我想用 cmake 做同样的事情。我创建了cmakelist.txt,但我不知道如何传递参数并检查cmakelist.txt 中的参数值。

我的 makefile 示例:

ifeq "$(FAB)" "po"
      //setting some flags
else
      //setting some iother flag
endif

从命令提示符获取参数并根据它设置标志的方法是什么?

【问题讨论】:

    标签: makefile cmake


    【解决方案1】:

    在 CMakeLists.txt 文件中,创建一个缓存变量,如下所述:

    SET(FAB "po" CACHE STRING "Some user-specified option")
    

    来源:http://cmake.org/cmake/help/v2.8.8/cmake.html#command:set

    然后,要么使用 GUI(ccmake 或 cmake-gui)设置缓存变量,要么在 cmake 命令行中指定变量的值:

    cmake -DFAB:STRING=po
    

    来源:http://cmake.org/cmake/help/v2.8.8/cmake.html#opt:-Dvar:typevalue

    如果您的选项实际上是布尔值,请将您的缓存变量修改为布尔值。

    【讨论】:

    • 如果在 CMakeLists.txt 文件中创建缓存变量,然后通过调用 cmake 传递参数,CMakeList.txt 文件不会一直覆盖参数值吗?
    • 不,缓存在第一次运行时使用默认值填充,或者如果提供了命令行上提供的值。第一次运行后,CMakeLists.txt SET 命令被忽略,使用缓存值。这使您可以调整这些选项并使它们保持不变。
    • 我在我的 CMakeList.txt 中创建了一个布尔值,将 SET() 设置为“false”,然后我使用“true”调用了 cmake 命令。从我的实验来看,SET() 中的值似乎是默认值?
    • SET 中的任何内容都是默认值,这意味着如果未在命令行中指定。命令行总是覆盖,即使缓存已经设置。如果您仍有疑问,请提出新问题
    【解决方案2】:

    Ubuntu 16.04 上的 CMake 3.13

    这种方法更灵活,因为它不会将 MY_VARIABLE 限制为类型:

    $ cat CMakeLists.txt 
    message("MY_VARIABLE=${MY_VARIABLE}")
    if( MY_VARIABLE ) 
        message("MY_VARIABLE evaluates to True")
    endif()
    
    $ mkdir build && cd build
    
    $ cmake ..
    MY_VARIABLE=
    -- Configuring done
    -- Generating done
    -- Build files have been written to: /path/to/build
    
    $ cmake .. -DMY_VARIABLE=True
    MY_VARIABLE=True
    MY_VARIABLE evaluates to True
    -- Configuring done
    -- Generating done
    -- Build files have been written to: /path/to/build
    
    $ cmake .. -DMY_VARIABLE=False
    MY_VARIABLE=False
    -- Configuring done
    -- Generating done
    -- Build files have been written to: /path/to/build
    
    $ cmake .. -DMY_VARIABLE=1
    MY_VARIABLE=1
    MY_VARIABLE evaluates to True
    -- Configuring done
    -- Generating done
    -- Build files have been written to: /path/to/build
    
    $ cmake .. -DMY_VARIABLE=0
    MY_VARIABLE=0
    -- Configuring done
    -- Generating done
    -- Build files have been written to: /path/to/build
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-12-27
      • 2020-08-18
      • 1970-01-01
      • 2021-11-29
      • 1970-01-01
      • 1970-01-01
      • 2012-10-01
      相关资源
      最近更新 更多