使用 cmake 将变量值传递给 make

mat*_*asg 0 c++ cmake

我正在尝试做类似的事情

cmake -DUSE_FILES_FOR_INPUT=ON ..
Run Code Online (Sandbox Code Playgroud)

然后开始make编译我的文件-DUSE_FILES_FOR_INPUT=ON。但我没有得到它的=ON价值。似乎它应该写入 flags.make 文件,但它不是:

$ grep USE_FILES_FOR_INPUT source/CMakeFiles/myprogram.dir/flags.make
CXX_DEFINES = -DUSE_FILES_FOR_INPUT
Run Code Online (Sandbox Code Playgroud)

如果我手动更改该文件,-DUSE_FILES_FOR_INPUT=ON则一切正常。我怎样才能让 cmake 在 中添加值flags.make

我需要做的事情的另一种方法:我正在使用的变量的类型为 BOOL,因此它足以获得

CXX_DEFINES = -DUSE_FILES_FOR_INPUT我什么时候做cmake -DUSE_FILES_FOR_INPUT=ON ..CXX_DEFINES =什么时候做cmake -DUSE_FILES_FOR_INPUT=OFF ..

这可能吗?

Bar*_*ray 5

这是一个小演示,

// demo.cpp
#include <iostream>
using namespace std;

int main()
{
#ifdef USE_FILES_FOR_INPUT
    cout << "Using files.." << endl;
#else
    cout << "Not using files.." << endl;
#endif


    return 0;
}
Run Code Online (Sandbox Code Playgroud)

CMakeLists.txt,

cmake_minimum_required(VERSION 3.0)

add_executable(demo demo.cpp)

if (USE_FILES_FOR_INPUT)
    add_definitions(-DUSE_FILES_FOR_INPUT)
endif()
Run Code Online (Sandbox Code Playgroud)

和一个样本输出,

baris$ cmake . && make && ./demo
<...>
Not using files..

baris$ cmake -DUSE_FILES_FOR_INPUT=ON . && make && ./demo
<...>
Using files..
Run Code Online (Sandbox Code Playgroud)