将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() 命令的源目录。