【问题标题】:How to parse whole project but build only subfolder that have dependancies on other subfolder, using cmake如何解析整个项目,但只构建依赖于其他子文件夹的子文件夹,使用 cmake
【发布时间】:2021-01-17 23:46:30
【问题描述】:

我正在将一个项目移植到 linux 和 cmake。它是一个巨大项目的一部分,每个子项目都在一个文件夹中。我只想构建我的项目及其依赖项。

我可以从主 CMakeList.txt 文件中评论其他项目,但这不起作用,因为对其他项目有一些依赖项(也可能依赖于其他项目......)

我不想修改来自其他项目的所有 cmake 文件来仅构建我需要的小部分,因为这很容易出错且耗时。例如,我可能会错误地签入一些我不应该签入的东西。

我的主要问题是其他项目不断中断(几乎其他人都只是在 Windows 中工作,所以 linux 构建没有得到很好的照顾)并且让我慢了很多。

我的问题是:有没有办法告诉 cmake:运行所有项目,但只编译编译某些子文件夹所需的内容?

【问题讨论】:

  • 所以使用EXCLUDE_FROM_ALL。或者指定只构建您想要的目标。
  • 有数千个目标。我不能将 EXCLUDE_FROM_ALL 添加到每个。此外,每次都需要还原该更改以签入 tfs 存储库。
  • 这就是为什么add_subdirectory(dir EXCLUDE_FROM_ALL) - 然后这个子目录中的所有目标都是EXCLUDE_FROM_ALL。但是只要指定你要编译的目标,不要编译all,你不想这样吗?
  • 是的!这行得通。我希望我以前问过这个。我没有看到 add_subdirectory 的这个选项。如果您将其写为答案,我会将其标记为正确答案。

标签: cmake


【解决方案1】:

你可以这样做:

add_subdirectory(dir EXCLUDE_FROM_ALL)

然后该子目录(和递归)中的所有目标默认标记为EXCLUDE_FROM_ALL,这样它们就不会默认构建。

您还可以指定要构建的特定目标:

cmake --build the_build_dir --target this_target -t another_target

【讨论】:

    猜你喜欢
    • 2010-10-07
    • 1970-01-01
    • 2020-07-18
    • 1970-01-01
    • 2013-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-12
    相关资源
    最近更新 更多