Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.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,我的代码中有一个预处理常量: const unsigned int nbins= _NBINS; 我希望能够在编译时更改它。例如,我希望能够写: cmake build_path [string to change _NBINS] 我如何使用cmake来完成它 编辑:我通常使用makefile,所以我有点困惑 对于那些问我为什么要这样做的人,这是因为我想用不同的_NBINS值自动测试我的程序。我希望每次都自动用新值重新编译程序_NBINS需要是一个常量,因为它的值对于优化非常关键我的解决方法

我的代码中有一个预处理常量:

const unsigned int nbins= _NBINS;
我希望能够在编译时更改它。例如,我希望能够写:

cmake build_path [string to change _NBINS]
我如何使用cmake来完成它

编辑:我通常使用makefile,所以我有点困惑
对于那些问我为什么要这样做的人,这是因为我想用不同的_NBINS值自动测试我的程序。我希望每次都自动用新值重新编译程序_NBINS需要是一个常量,因为它的值对于优化非常关键

我的解决方法是调用

cmake build_path -D_NBINS=TRUE
在CMakeLists.txt中

if (_NBINS)
        add_definitions(-D_NBINS)
endif()

第一行将把选项传递给cmake,cmake将把它进一步传递给gcc。我不知道是否有办法将其直接传递给gcc。虽然我认为它应该是类似于cmake-dcmake\ucxflags='-D\unbins'

我的解决方法是调用

cmake build_path -D_NBINS=TRUE
在CMakeLists.txt中

if (_NBINS)
        add_definitions(-D_NBINS)
endif()
第一行将把选项传递给cmake,cmake将把它进一步传递给gcc。我不知道是否有办法将其直接传递给gcc。但是我认为它应该是类似于
cmake-dcmake\ucxflags='-D\unbins'

我如何使用cmake来完成它

您可以将常量的值传递到cmake变量中,然后在cmake脚本中获取该常量的值并将其传递给编译器

通过以下方式呼叫cmake:

cmake build_path -D NBINS=something
和内部
CMakeLists.txt

add_executable(your_target ...)
target_compile_definitions(your_target PUBLIC NBINS=${NBINS})
或在目标之前:

add_compile_definitions(NBINS=${NBINS})

注意,在C++标识符中,前导代码< > >后置大写字母。不要在代码中使用它们。因此,请注意,我已经删除了上面代码段中的前导

\uu

我如何使用cmake来完成它

您可以将常量的值传递到cmake变量中,然后在cmake脚本中获取该常量的值并将其传递给编译器

通过以下方式呼叫cmake:

cmake build_path -D NBINS=something
和内部
CMakeLists.txt

add_executable(your_target ...)
target_compile_definitions(your_target PUBLIC NBINS=${NBINS})
或在目标之前:

add_compile_definitions(NBINS=${NBINS})

注意,在C++标识符中,前导代码< > >后置大写字母。不要在代码中使用它们。因此,请注意,我删除了上面代码段中的前导

它不是预处理常量。Cmake对C++一无所知。我认为你做不到。您必须在配置时(即运行cmake时)设置常量。了解如何使用AUTOCONF cmake命令行参数指定字符串变量的值。从CMake文件生成的Makefile只执行CMake告诉它的操作。在发出Make命令并询问CMake之前,您需要确定要使用的工具。这没有道理。你真的在使用CMake吗?如果是这样的话,从阅读命令开始。它不是一个预处理常量。Cmake对C++一无所知。我认为你做不到。您必须在配置时(即运行cmake时)设置常量。了解如何使用AUTOCONF cmake命令行参数指定字符串变量的值。从CMake文件生成的Makefile只执行CMake告诉它的操作。在发出Make命令并询问CMake之前,您需要确定要使用的工具。这没有道理。你真的在使用CMake吗?如果是这样,请从阅读命令开始。优先于
add_definitions
,因为它将定义的范围限制为单个CMake目标。(它还允许您将
-D
从调用中取出,这很好。)正确的,好的点优先于
添加定义,因为它将定义的范围限制为单个CMake目标。(它还允许您将
-D
从调用中取出,这很好。)正确,很好