如何在CMake中重用代码

时间:2015-05-26 07:21:23

标签: linux cmake code-reuse reusability

我有以下代码获取当前系统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文件可见。

2 个答案:

答案 0 :(得分:3)

如果您在顶级CMakeLists.txt文件中提供了CMake功能,那么您在CMakeLists.txt添加的子目录的ADD_SUBDIRECTORY个文件中也可以使用它。

直接在顶级CMakeLists.txt文件中定义该功能,或在INCLUDE(GetIP.cmake)使用{。}}。

答案 1 :(得分:2)

如果它只是关于IP本身,只需将其放在一个变量中。

目录中设置的变量由所有子目录继承,但不由父目录继承。您可以使用set commandPARENT_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
 )