首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >cmake依赖问题

cmake依赖问题
EN

Stack Overflow用户
提问于 2009-12-16 03:28:47
回答 2查看 1.9K关注 0票数 1

我有3个小的依赖工具:

代码语言:javascript
复制
main-tool/
    tool1/
    tool2/ 

       * ----- main-tool ----- *
       |                       |
      tool1   ---------- >    tool2

主工具依赖于tool1 & tool2。

tool1依赖于tool2。

CMakeFiles如下所示:

代码语言:javascript
复制
main-tool/CMakeLists.txt
   SUBDIRS{"tool1"}
   SUBDIRS{"tool2"}

main-tool/tool1/CMakeLists.txt
   SUBDIRS("../tool2"}

我可以很顺利地编译tool1。然而,每当我想编译main-tool时,tool2就会包含两次,并产生错误。我怎样才能避免这种情况?

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-02-10 06:53:14

首先,您应该使用add_subdirectory()而不是deprecatedsubdirs()。通过这种方式,您可以更精确地控制处理顺序。

其次,因为一切都依赖于tool2,所以您应该首先构建tool2。

代码语言:javascript
复制
main-tool/CMakeLists.txt:
   add_subdirectory{"tool2"}
   add_subdirectory{"tool1"}

不要在tool1目录中添加另一个add_subdirectory命令。有两种方法可以用来从tool1构建中访问tool2。

cmake

  • 首先,您可以在与tool2相关的顶层主CMakeLists.txt中定义一些cmake变量,然后在tool2构建中填充这些变量。您可能需要使用PARENT_SCOPE指令从tool2子目录中set这些变量。然后使用这些变量从tool2 subdirectory.

  • Alternatively,访问tool1,您可以从顶级CMakeLists文件构建所有三个工具(依次为tool2、tool1和main tool )。构建文件可能会很长,但它省去了管理cmake变量作用域的麻烦。这是我通常采用的方法,我推荐它。

总而言之,我的建议是“一个大的CMakeLists.txt文件”。除非它变得非常非常大。

票数 3
EN

Stack Overflow用户

发布于 2009-12-23 23:08:33

你真的应该只对子目录使用SUBDIRS。你所说的依赖到底是什么意思?如果您使用TARGET_LINK_LIBRARIES将一些库链接在一起,CMake将在您的项目目录中找到它们。如果它是运行时依赖项,您通常只在安装后才关心它,或者您可以使用"${CMAKE_CURRENT_BINARY_DIR}/../tool2/tool2"作为二进制文件的路径。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1909783

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档