cmake PARENT_SCOPE
时间: 2024-05-27 10:07:00 浏览: 19
在 CMakeLists.txt 文件中,当我们使用 set 命令给一个变量赋值时,该变量默认只在当前作用域内有效,即只在该 set 命令所在的函数或者 if/else/foreach 等语句中有效。如果我们希望这个变量在更高层次的作用域中也能被访问,就需要使用 PARENT_SCOPE 参数。
例如,我们有两个函数分别定义了变量 var1 和 var2,且 var1 被定义在了函数内部,而 var2 被定义在了函数外部:
```
function(func1)
set(var1 "hello")
endfunction()
set(var2 "world")
```
如果我们在 func1 函数中使用 PARENT_SCOPE 参数,则 var1 可以被 func1 的调用者访问到:
```
function(func1)
set(var1 "hello" PARENT_SCOPE)
endfunction()
set(var2 "world")
func1()
message("var1: ${var1}") # 输出 "var1: hello"
message("var2: ${var2}") # 输出 "var2: world"
```
需要注意的是,使用 PARENT_SCOPE 参数将变量提升到更高层次的作用域时,需要确保该作用域中没有同名变量,否则会覆盖原有的变量。
相关问题
cmake中PARENT_SCOPE
在CMake中,PARENT_SCOPE是一个用于设置变量作用域的特殊标识符。当在一个函数或者一个if语句块中定义了一个变量,并且希望将其传递到父级作用域时,可以使用PARENT_SCOPE。
具体来说,当在一个函数内部使用set命令定义了一个变量,并且在该函数外部也需要使用这个变量时,可以在set命令中添加PARENT_SCOPE标识符,将变量的作用域提升到父级作用域。
以下是一个示例:
```
function(example_function)
set(local_variable "Hello" PARENT_SCOPE)
endfunction()
example_function()
message("Variable value: ${local_variable}")
```
在上面的示例中,我们在example_function函数内部定义了一个名为local_variable的变量,并使用PARENT_SCOPE将其作用域提升到了父级作用域。因此,在函数外部使用message命令输出local_variable的值时,可以正常访问到该变量。
cmake CMAKE_MODULE_PATH
CMAKE_MODULE_PATH是一个CMake相关命令,用于指定CMake模块文件的搜索路径。在CMakeLists.txt中设置CMAKE_MODULE_PATH变量时,CMake会在该路径下搜索并包含名为<name>.cmake的文件。通常,我们可以使用绝对路径或相对路径来指定文件的完整路径。
下面是两种常见的设置CMAKE_MODULE_PATH的方法:
1. 方法一:将cmake子目录添加到CMake模块搜索的路径列表中并包括相应的模块文件:
```cmake
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
include(colors)
```
其中,colors是模块文件的名称,该文件位于cmake子目录下。这种方法可以直接在CMakeLists.txt中使用模块文件的名称进行包含。
2. 方法二:直接指定模块文件的完整路径进行包含:
```cmake
include(cmake/colors.cmake)
```
其中,cmake/colors.cmake是模块文件的完整路径。这种方法可以在CMakeLists.txt中使用模块文件的完整路径进行包含。
无论使用哪种方法,CMake会在指定的CMAKE_MODULE_PATH中搜索并包含相应的模块文件。这样,在包含处之后的地方,我们就可以调用该模块文件中定义的宏和函数了。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)