Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/160.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用cmake传递要生成的变量值_C++_Cmake - Fatal编程技术网

C++ 使用cmake传递要生成的变量值

C++ 使用cmake传递要生成的变量值,c++,cmake,C++,Cmake,我正试着做类似的事情 cmake -DUSE_FILES_FOR_INPUT=ON .. 然后获取make,使用-DUSE\u files\u FOR\u INPUT=ON编译我的文件。但是我没有得到上的=值。似乎应该将其写入flags.make文件,但它不是: $ grep USE_FILES_FOR_INPUT source/CMakeFiles/myprogram.dir/flags.make CXX_DEFINES = -DUSE_FILES_FOR_INPUT 如果我使用-DUSE

我正试着做类似的事情

cmake -DUSE_FILES_FOR_INPUT=ON ..
然后获取
make
,使用
-DUSE\u files\u FOR\u INPUT=ON
编译我的文件。但是我没有得到上的
=值。似乎应该将其写入flags.make文件,但它不是:

$ grep USE_FILES_FOR_INPUT source/CMakeFiles/myprogram.dir/flags.make
CXX_DEFINES = -DUSE_FILES_FOR_INPUT
如果我使用
-DUSE\u FILES\u FOR\u INPUT=ON
手动更改该文件,则一切正常。 如何让cmake在
标志中添加值。make

我需要做的是另一种方法:我使用的变量具有BOOL类型,因此它足以

CXX\u DEFINES=-DUSE\u FILES\u FOR\u INPUT
当我执行
cmake-DUSE\u FILES\u FOR\u INPUT=ON.
CXX\u DEFINES=
当我执行
cmake-DUSE\u FILES\u FOR\u INPUT=OFF.


这可能吗?

这里有一个小演示

// 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;
}
和一个样本输出

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

baris$ cmake -DUSE_FILES_FOR_INPUT=ON . && make && ./demo
<...>
Using files..
baris$cmake.&制作和/演示
不使用文件。。
baris$cmake-用于输入的数据文件=打开和制作和/演示
使用文件。。

这里是一个小演示

// 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;
}
和一个样本输出

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

baris$ cmake -DUSE_FILES_FOR_INPUT=ON . && make && ./demo
<...>
Using files..
baris$cmake.&制作和/演示
不使用文件。。
baris$cmake-用于输入的数据文件=打开和制作和/演示
使用文件。。
您应该查看。它们显示了一个使用特殊cmake构造的示例
#cmakedefine
。这可能比巴里斯描述的工作多一点,但我更喜欢使用<代码>配置文件> <代码>和<代码>·{CMACUMENT < /Cord> >将CMASE设置获取为C++代码。p> 以下是完整的:


考虑包含foo.h.in文件的源树:

#cmakedefine FOO_ENABLE
#cmakedefine FOO_STRING "@FOO_STRING@"
相邻的
CMakeLists.txt
可以使用configure_文件来配置标头:

option(FOO_ENABLE "Enable Foo" ON)
if(FOO_ENABLE)
  set(FOO_STRING "foo")
endif()
configure_file(foo.h.in foo.h @ONLY)
这将在与此源目录对应的生成目录中创建一个
foo.h
。如果启用了
FOO_ENABLE
选项,则配置的文件将包含:

#define FOO_ENABLE
#define FOO_STRING "foo"
/* #undef FOO_ENABLE */
/* #undef FOO_STRING */
否则,它将包含:

#define FOO_ENABLE
#define FOO_STRING "foo"
/* #undef FOO_ENABLE */
/* #undef FOO_STRING */
然后可以使用
include\u directories()
命令将输出目录指定为include目录:

include_directories(${CMAKE_CURRENT_BINARY_DIR})
因此,源可能包括标题,如
#include

,您应该查看。它们显示了一个使用特殊cmake构造的示例
#cmakedefine
。这可能比巴里斯描述的工作多一点,但我更喜欢使用<代码>配置文件> <代码>和<代码>·{CMACUMENT < /Cord> >将CMASE设置获取为C++代码。p> 以下是完整的:


考虑包含foo.h.in文件的源树:

#cmakedefine FOO_ENABLE
#cmakedefine FOO_STRING "@FOO_STRING@"
相邻的
CMakeLists.txt
可以使用configure_文件来配置标头:

option(FOO_ENABLE "Enable Foo" ON)
if(FOO_ENABLE)
  set(FOO_STRING "foo")
endif()
configure_file(foo.h.in foo.h @ONLY)
这将在与此源目录对应的生成目录中创建一个
foo.h
。如果启用了
FOO_ENABLE
选项,则配置的文件将包含:

#define FOO_ENABLE
#define FOO_STRING "foo"
/* #undef FOO_ENABLE */
/* #undef FOO_STRING */
否则,它将包含:

#define FOO_ENABLE
#define FOO_STRING "foo"
/* #undef FOO_ENABLE */
/* #undef FOO_STRING */
然后可以使用
include\u directories()
命令将输出目录指定为include目录:

include_directories(${CMAKE_CURRENT_BINARY_DIR})
因此,源可能包括标题作为
#include