使用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
是一种解决方案,但有更简洁的方法吗?
答案 0 :(得分:1)
免责声明:这个问题对我来说仍然有点不清楚,如果答案不能反映您的需求,请提前道歉。
如果您要解决的问题是您有很多目录,例如src
,其中相同的顶级CMakeLists.txt
已关联,并且您想要包含特定的CMakeExtras.txt
存在于每个特定目录中,然后您可以通过添加:
include(${CMAKE_CURRENT_SOURCE_DIR}/CMakeExtras.txt)
到您的顶级CMakeLists.txt
。根据{{3}}:
这是cmake当前正在处理的源目录的完整路径
并且应该解决这个问题(即变量是指正在处理的目录,而不是指使用它的CMakeLists.txt
。
如果您的问题是如何计算src
路径,假设有顶级CMakelists.txt
的链接,那么您只需要使用the documentation,其中:
是最新project()命令的源目录。