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 2.8.12.2。我已经设置了CMAKE\u DEBUG\u POSTFIX,它会自动与add\u library命令一起使用。但它不会自动与add_executable命令一起使用。我发现我可以设置DEBUG\u POSTFIXtarget属性,以便在可执行文件名中获得调试后缀,但这需要使用额外的命令 add_executable(${PROJECT_NAME} ${SOURCE_FILES}) set_target_properties(${PROJECT_NAME}

我正在使用cmake 2.8.12.2。我已经设置了
CMAKE\u DEBUG\u POSTFIX
,它会自动与
add\u library
命令一起使用。但它不会自动与
add_executable
命令一起使用。我发现我可以设置
DEBUG\u POSTFIX
target属性,以便在可执行文件名中获得调试后缀,但这需要使用额外的命令

add_executable(${PROJECT_NAME} ${SOURCE_FILES})
set_target_properties(${PROJECT_NAME} PROPERTIES DEBUG_POSTFIX ${CMAKE_DEBUG_POSTFIX})

第二个命令是否需要显式设置
DEBUG\u POSTFIX
目标属性,还是有更简单的方法?

当前的cmake状态文档

还有一个
\u OUTPUT\u NAME
,可以根据每个配置设置输出名称
\u POSTFIX
在名为的配置(大写,例如“DEBUG\u POSTFIX”)下构建目标时,为目标的真实名称设置一个后缀。当目标被创建为变量
CMAKE\uuu POSTFIX
的值时,此属性的值将被初始化(可执行目标除外,因为早期的CMAKE版本未将此变量用于可执行文件)

因此,它似乎强调了一个事实,即cmake没有在可执行文件的名称中使用
cmake\u DEBUG\u POSTFIX
的值。所以

add_executable(myexe ${SOURCE_FILES})
set_target_properties(myexe PROPERTIES DEBUG_POSTFIX ${CMAKE_DEBUG_POSTFIX})
在为
DEBUG
配置构建
myexe
目标时,将使用全局变量
${CMAKE\u DEBUG\u POSTFIX}
的值


注意,这个问题的一位评论者对变量
${PROJECT_NAME}
的使用感到困惑。使用
project(myexe)
时,此变量会自动设置为
myexe
。使用
${PROJECT_NAME}
相当于
myexe
,这样可以更容易地复制/粘贴到新的CMakeLists.txt

只需提及,如果您的项目中有许多子可执行文件,那么值得一看。本例中的变量在为特定构建(发布/调试)运行CMake时需要更改,但此后缀自动附加到每个ADD_可执行文件(…)-调用可执行文件名。使用CMake 2.8.12.2和3.0.2进行测试和验证

您的变量名让我感到困惑:
PROJECT\u NAME
对于目标来说是个坏名字,
CMake\u DEBUG\u POSTFIX
应该包含您要添加的后缀。为什么要使用变量?至少在您只使用一个字符串的情况下,将其作为字符串键入。不要使用以CMAKE_uu开头的变量名,因为它是为CMAKE自己的变量保留的。或者你错了,你认为这个变量是你需要传递的?然后:您必须传递要添加到调试目标的后缀。我为每个目标使用一个变量,并且我在许多项目上已经这样做了很长时间。