xcode - CMake:如何在 *nix 系统上使用所有内核构建外部项目?

标签 xcode visual-studio makefile cmake external-project

我正在开发一个基于 CMake 的项目,该项目依赖于也使用 CMake 的巨大第三方代码库。我通过 ExternalProject_Add 机制包括第三方项目。该项目默认使用 Makefile,尽管父项目是 Xcode 项目。

外部项目的最终构建非常慢,因为它只使用一个内核。我不认为我可以强制项目生成 Xcode 项目而不是 Makefile。

假设我受制于 Makefile,我如何通知 ExternalProject_Add 使用所有可用于 titanic 第三方项目的内核?

请注意,添加不可避免的“-j N”选项(为什么默认情况下“make”不这样做?)需要有条件地存在于 Mac 和 Linux 构建中,但不是 Windows/Visual Studio。

最佳答案

您基本上已经自己回答了这个问题:使用另一个构建生成器。 Ninja并行构建是否购买默认值,CMake 可以很好地使用它。

include(ExternalProject)
ExternalProject_Add(foobar
    [...]
    ## configure options
    # cmake is used by default
    #CONFIGURE_COMMAND cmake
    # cmake will use the same generator as the main project, unless we override it
    CMAKE_GENERATOR Ninja
    ## build options
    BUILD_COMMAND ninja
    [...]
)

如果您不想使用不同的生成器,请使用make 的选项。在您的 shell 中设置 MAKEFLAGS。在您的 CMakeLists.txt 中执行如下操作:

include(ProcessorCount)
ProcessorCount(N)

if(CMAKE_SYSTEM_NAME MATCHES "Linux|Darwin")
    include(ExternalProject)
    ExternalProject_Add(foobar
        BUILD_COMMAND make -j${N}
    )
else()
    ## do windows stuff
endif()

此外,请记住许多 ExternalProject_Add() 选项(包括 *_COMMAND 选项)覆盖 合理的默认值。因此,在定义外部项目时,从小处着手,然后根据需要添加选项。

tl;dr

  • 在定义外部项目时要稀疏。根据需要进行构建。
  • 使用另一个更了解并行性的构建生成器 '制作'
  • 如果您想为您的应用程序使用不同的 CMake 构建生成器 外部项目而不是主项目,您必须指定它。

关于xcode - CMake:如何在 *nix 系统上使用所有内核构建外部项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55174921/

相关文章:

visual-studio - 双击 Visual Studio 2019 时如何禁用编辑项目?

c - 首先为 makefile 创建哪个文件有关系吗?

PHP 错误 : libphp5. 所以: undefined symbol :_estrndup

c++ - 运行测试时如何考虑依赖关系?

iPhone/iPad 应用程序介绍

iphone - 用户界面自动化 : Failed to authorize rights with status: -60007

swift - 使用 NSFetchRequest 从 CoreData 填充 TableView

xcode - Swift 更改我的 xcdatamodeld 和 XXX.swift 不是只创建 XXX+CoreDataProperties.swift 吗?

c# - Visual Studio 2010 RC 卡住中的 IntelliSense

c++ - 类型 "const char *"的 arg 与类型 "LPSTR"c++ 的参数不兼容