我有3个小的依赖工具:
main-tool/
tool1/
tool2/
* ----- main-tool ----- *
| |
tool1 ---------- > tool2
主要工具依赖于tool1& TOOL2。
tool1依赖于tool2
CMakeFiles看起来像这样:
main-tool/CMakeLists.txt
SUBDIRS{"tool1"}
SUBDIRS{"tool2"}
main-tool/tool1/CMakeLists.txt
SUBDIRS("../tool2"}
我可以顺利编译tool1。但是,每当我想编译main-tool时,tool2都包含两次并产生错误。我怎么能避免这个?
感谢。
答案 0 :(得分:3)
首先,您应该使用add_subdirectory()
而不是subdirs()
,即deprecated。您可以更精确地控制处理顺序。
其次,因为一切都取决于tool2,所以你应该首先构建tool2。
main-tool/CMakeLists.txt:
add_subdirectory{"tool2"}
add_subdirectory{"tool1"}
不要在tool1目录中添加另一个add_subdirectory
命令。您可以使用两种方法从tool1构建中访问tool2。
set
来自tool2子目录的变量。然后使用这些变量从tool1子目录访问tool2。总结一下,我的建议是“一个大的CMakeLists.txt文件”。除非真的变得非常大。
答案 1 :(得分:0)
你真的应该只对子目录使用SUBDIRS
。你依赖的实际意思是什么?如果将一些库链接在一起使用TARGET_LINK_LIBRARIES
,CMake将在您的项目中找到它们而不管目录。如果它是运行时依赖性,您通常只在安装后关心它,或者您可以使用"${CMAKE_CURRENT_BINARY_DIR}/../tool2/tool2"
作为二进制文件的路径。