【问题标题】:CMAKE add sub-directory which is not sub-directory on real directoryCMAKE在真实目录中添加非子目录的子目录
【发布时间】:2011-12-20 07:33:26
【问题描述】:

是否可以在 cmake 中包含同级目录作为子目录?

有点像

A 
  CMakeLists.txt

B
  CMakeLists.txt

而 B 包含 A 作为子目录?

【问题讨论】:

    标签: cmake


    【解决方案1】:

    这是可能的,虽然可能不推荐......

    您可以使用 add_subdirectory 命令的两个参数形式将您想要的任何目录添加为“子”目录:

    add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/../A ${CMAKE_CURRENT_BINARY_DIR}/A)
    

    双参数形式的第二个参数指定将添加的子目录的二进制目录放在哪里。

    您只需要注意没有 B 的另一个真正的子目录也被命名为“A”并且也是 add_subdirectory'd... 因为如果你这样做了,那么这将是一个错误,因为 CMake 不能将两个不同的源目录映射到同一个构建目录。

    【讨论】:

    • 如果使用${CMAKE_CURRENT_SOURCE_DIR}/../A/some/path 会怎样?不会避免名字冲突的错误吗?
    • 是否存在名称冲突取决于在所有 add_subdirectory 调用的总和中使用的完整目录集。以及 CMakeLists.txt 文件的内容。例如,“project”命令根据项目名称引入 source_dir 和 binary_dir 变量。使用“../A/some/path”将避免与另一个“A”发生冲突,但不会与另一个“路径”发生冲突
    • 你可以简单地使用绝对路径。你为什么不那样做?您选择这里有什么原因吗?
    • @Rika 使用绝对路径当然是可能的。我从不推荐它,因为绝对路径总是因平台而异,而且很可能因开发人员而异。一般来说,除了存储库中存在的结构之外,您对代码在开发人员磁盘上的布局方式了解为零。
    • @DLRdave 你肯定 100% 正确。感谢您的回复,我很欣赏它
    【解决方案2】:

    很遗憾,没有。

    作为解决方案,我可能会建议您在顶层添加_subdirectory(A) 和add_subdirectory(B),并使用PARENT_SCOPE 设置要从A 导出的变量。 这将允许 B/CMakeLists.txt 访问 A/CMakeLists.txt 中定义的变量

    【讨论】:

    • 其实可以的。这不是很常见......请参阅我的其他答案。
    • 哦,哇,不知道。你当时为什么接受我的帖子作为答案?你也可以接受你的答案。
    • 糟糕,我把你和asker搞混了。
    猜你喜欢
    • 1970-01-01
    • 2012-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多