【问题标题】:CMake workflow?CMake 工作流程?
【发布时间】:2015-07-03 15:12:26
【问题描述】:

我正在学习 CMake,但在理解其多步骤工作流程时遇到了问题。到目前为止,我的理解是你:

  • 写一个CMakeLists.txt
  • 从子目录运行 cmake 以生成构建文件(在我的例子中是 Makefile)
  • 运行make

但是,我不明白您应该如何处理不同的目标(发布与调试)。通过在两个不同的子目录中运行 CMake?

另外,我不明白您为什么要编辑 CMakeCache.txt(还有一个 GUI 工具)。通过传递不同的选项来模拟您使用./configure 完成的工作?

【问题讨论】:

    标签: cmake cmake-gui


    【解决方案1】:

    你说得很对。 write CMakeLists.txt > cmake > make 序列是正确的。

    关于不同的配置(调试与发布),您必须区分多配置生成器(Visual Studio、XCode)和单配置生成器(其他所有)。使用多配置生成器,您可以生成一个包含所有配置的构建系统(例如解决方案文件),并在构建时在它们之间进行选择。

    使用单配置生成器,通过生成不同的构建系统获得不同的配置,即在不同的目录中多次运行CMake(并且CMAKE_BUILD_TYPECMake变量的值不同)。

    所以你会做这样的事情:

    > cd my_project/bld/debug
    > cmake ../../src -DCMAKE_BUILD_TYPE=Debug
    > cd ../release
    > cmake ../../src -DCMAKE_BUILD_TYPE=Release
    

    关于编辑缓存(通常通过 CMake GUI 或ccmake):你又是对的,这在很大程度上对应于从 AutoMake 世界向./configure 传递选项。这将是新下载项目的典型工作流程(使用 CMake GUI):

    1. 运行CMake GUI,指向你想要的源目录(输入)和二进制目录(输出)
    2. 配置。 这将使用项目指定的默认值填充缓存。如果 CMake 无法自动找到项目的某些依赖项,则会以错误结束。
    3. 检查缓存,更改您不喜欢的任何值(例如编译选项),填写任何缺少的选项(CMake 找不到的库路径等)
    4. 重复第 2 步和第 3 步,直到您对项目的设置感到满意为止。
    5. 生成构建系统。
    6. 退出 CMake GUI 并使用适当的构建工具构建

    【讨论】:

    • 您当然可以将选项传递给 cmake 配置步骤,而不是在 cmake-gui 中设置它们:cmake ... -DWITH_SQLITE=ON ...
    • 如果您的构建系统可以被信任不接受发布构建的调试对象文件并重新生成它们,您可以为调试和发布配置使用相同的构建目录。否则,您可以使用 cmake --build ... --clean-first 构建
    • @tamas.kenez 我认为您不能可靠地为多个配置使用相同的二进制目录。 CMakeLists 可以包含if(CMAKE_BUILD_TYPE ...) 样式的代码,这意味着只有您运行cmake 的最后一个配置才是您可以合理构建的配置。
    • @Angew,是的,当然,这就是我的意思,总是先配置然后再构建。作为旁注,当人们以他们习惯的方式使用多配置生成器(Xcode 和 VS)时,也就是说,没有为 cmake-config 步骤指定 CMAKE_BUILD_TYPEif(CMAKE_BUILD_TYPE)-like 构造将失败。所以应该避免这种情况。
    【解决方案2】:

    What @Angew said。另外,这是cmake-gui 的图片:

    另请注意,您在 Ubuntu 上使用 sudo apt install cmake-qt-gui 安装它(CMake GUI),并使用 cmake-gui 运行它。

    来源:Where is the CMake GUI for Linux?

    这是我的cmake-gui 图片:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-10-23
      • 1970-01-01
      • 2020-07-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多