我有以下代码获取当前系统IP并将其存储在SERVER_IP
变量中:
EXECUTE_PROCESS(
COMMAND ip route get 8.8.8.8
COMMAND awk "NR==1 {print $NF}"
OUTPUT_VARIABLE SERVER_IP
OUTPUT_STRIP_TRAILING_WHITESPACE
)
我需要在我的CMakeLists.txt
文件层次结构中的几个位置使用此IP。重用此代码的最佳方法是什么?我的第一个想法是使其成为function(GetIP)
之类的函数,但我不知道在哪里放置此函数以使其对所有CMakeLists.txt文件可见。
答案 0 :(得分:3)
如果您在顶级CMakeLists.txt
文件中提供了CMake功能,那么您在CMakeLists.txt
添加的子目录的ADD_SUBDIRECTORY
个文件中也可以使用它。
直接在顶级CMakeLists.txt
文件中定义该功能,或在INCLUDE(GetIP.cmake)
使用{。}}。
答案 1 :(得分:2)
如果它只是关于IP本身,只需将其放在一个变量中。
目录中设置的变量由所有子目录继承,但不由父目录继承。您可以使用set
command的PARENT_SCOPE
参数将局部变量的范围扩展一级。
或者,将变量放在缓存中以使其可以全局访问。除非标记为内部,否则这也将使变量可通过CMake GUI进行配置。
set(MY_SERVER_IP 8.8.8.8 CACHE STRING "IP address of the server responsible for X")
[...]
EXECUTE_PROCESS(
COMMAND ip route get ${MY_SERVER_IP}
COMMAND awk "NR==1 {print $NF}"
OUTPUT_VARIABLE SERVER_IP
OUTPUT_STRIP_TRAILING_WHITESPACE
)