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
通常如何使用CMake基于配置控制操作?_Cmake - Fatal编程技术网

通常如何使用CMake基于配置控制操作?

通常如何使用CMake基于配置控制操作?,cmake,Cmake,CMake具有CMake_BUILD_类型,允许自定义单个目标生成器。但这对于多个目标生成器来说是完全没有价值的,因为CMAKE_BUILD_类型被忽略了 (举例来说,我希望有一个目标(比如一个冗长的Doxygen构建),我只想在Visual Studio生成器和nmake生成器的发布模式下构建它。)AFAIK,至少对于Visual Studio项目,CMake并没有忽略多个目标生成器的CMake_build_TYPE。所以,如果你这样做: if(CMAKE_BUILD_TYPE STREQUA

CMake具有CMake_BUILD_类型,允许自定义单个目标生成器。但这对于多个目标生成器来说是完全没有价值的,因为CMAKE_BUILD_类型被忽略了


(举例来说,我希望有一个目标(比如一个冗长的Doxygen构建),我只想在Visual Studio生成器和nmake生成器的发布模式下构建它。)

AFAIK,至少对于Visual Studio项目,CMake并没有忽略多个目标生成器的
CMake_build_TYPE
。所以,如果你这样做:

if(CMAKE_BUILD_TYPE STREQUAL "Release")
...
endif()

只有在IDE中选择了“Release”时,它才会起作用。

AFAIK,对于多个目标生成器,至少对于Visual Studio项目,CMake不会忽略
CMake\u BUILD\u TYPE
。所以,如果你这样做:

if(CMAKE_BUILD_TYPE STREQUAL "Release")
...
endif()

只有在IDE中选择“Release”时,它才能工作。

我认为这不起作用。您的“if”语句在cmake配置时提前执行。VisualStudioIDE中“Release”的OPs选择发生在构建时,这就是为什么我把“AFAIK”放在后面。VS生成器应该将由if()生成的代码放入.vsproj的发行版部分。但我不确定。我可以确认这实际上被忽略了。(具体来说,在为VisualStudio构建时,CMAKE_BUILD_TYPE是空字符串)我认为这行不通。您的“if”语句在cmake配置时提前执行。VisualStudioIDE中“Release”的OPs选择发生在构建时,这就是为什么我把“AFAIK”放在后面。VS生成器应该将由if()生成的代码放入.vsproj的发行版部分。但我不确定。我可以确认这实际上被忽略了。(特别是,在为visual studio构建时,CMAKE_BUILD_TYPE是空字符串)这就是为什么我总是为我的doxygen生成创建一个单独的CMAKE目标,它不是“全部”CMAKE目标的一部分;然后,我在发布时手动构建doxygen目标。你的问题很好。这就是为什么我总是为我的强氧代制定一个单独的cmake目标,而不是“全部”cmake目标的一部分;然后,我在发布时手动构建doxygen目标。你的问题很好。