2017-01-17 39 views
3

有没有办法在执行另一个CMakeLists.txt文件时临时更改CMake变量。像这样?按下/弹出cmake变量

PUSH (SOME_VARIABLE) 
SET (SOME_VARIABLE "temporary value") 
ADD_SUBDIRECTORY("subdir") 
POP (SOME_VARIABLE) 

我知道你可以做到这一点是这样的:

SET (SOME_VARIABLE_TMP "${SOME_VARIABLE}") 
SET (SOME_VARIABLE "temporary value") 
ADD_SUBDIRECTORY("subdir") 
SET (SOME_VARIABLE "${SOME_VARIABLE_TMP}) 

而且我想我甚至可以做一些哈克功能做我自己,像这样(未经):

FUNCTION (PUSH VARNAME) 
    SET (${VARNAME}_TMP "${${VARNAME}}" PARENT_SCOPE) 
ENDFUNCTION() 

FUNCTION (POP VARNAME) 
    SET (${VARNAME} "${${VARNAME}_TMP}" PARENT_SCOPE) 
ENDFUNCTION() 

你甚至可以扩展它,所以它可以工作,如果你推推弹出流行。但我想知道是否有一种很好的方式可以在本地执行

回答

4

不,没有一种很好的方法可以做到。

您可以将ADD_SUBDIRECTORY()和所有变量修改移动到FUNCTION()本身。这会给你自己的变量范围:

FUNCTION(ADD_MY_SUBDIR) 
    SET (SOME_VARIABLE "temporary value") 
    ADD_SUBDIRECTORY("subdir") 
ENDFUNCTION()