在 ROS 的 CMake 中查找源根目录



将CMake与ROS一起使用,最终可以得到这样的目录树:

+src
-CMakeLists.txt (symbolic link to toplevel.cmake)
-CMakeExtras.txt (I want to use this)
+computing
+perception
+per1
-CMakeLists.txt
+per2
-CMakeLists.txt
+detection
+det1
-CMakeLists.txt
+sensing
+dev1
-CMakeLists.txt

CMakeExtras.txt中,我想设置 CMake 变量,只加载一次常见包,等等,例如:

set(CMAKE_CXX_FLAGS "-O3 -Wall ${CMAKE_CXX_FLAGS}")
find_package(Boost REQUIRED COMPONENTS thread)

我该怎么做?INCLUDE()命令很明显,但我无法编辑根级别CMakeLists.txt,而且似乎没有允许类似INCLUDE("${OVERALL_SRC_DIR}/CMakeExtras.txt)的变量。我想:

catkin_make -DOVERALL_SRC_DIR=~/project/src

将是一种解决方案,但是有没有更整洁的方法?

免责声明:这个问题对我来说仍然有点不清楚,所以如果答案不能反映您的需求,请提前道歉。

如果要解决的问题是,您有很多目录(例如src其中链接了相同的顶级CMakeLists.txt,并且您希望包含驻留在每个特定目录中的特定CMakeExtras.txt,那么您可以通过添加以下内容来解决此问题:

include(${CMAKE_CURRENT_SOURCE_DIR}/CMakeExtras.txt)

到您的顶级CMakeLists.txt。根据文档:

这是 cmake 当前正在处理的源目录的完整路径

并且应该解决这个问题(即变量是指正在处理的目录,而不是使用它的CMakeLists.txt)。

相反,如果您的问题是如何计算src路径,给定指向顶级CMakelists.txt的链接,那么您只需要使用PROJECT_SOURCE_DIR:

是最新 project() 命令的源目录。

最新更新