【问题标题】:Can Cmake generate a single makefile that supports both debug and releaseCmake能否生成一个同时支持debug和release的makefile
【发布时间】:2012-04-10 05:18:22
【问题描述】:

似乎我们需要为每种构建类型(调试/发布)创建单独的文件夹,在每个构建类型上运行 cmake,并为调试/发布配置生成单独的 makefile。是否可以使用同时支持调试/发布配置的 cmake 创建一个单一的 makefile,并且当我们实际运行“make”时,它将为中间产品和最终产品(如 dll、exe)创建单独的文件夹。

【问题讨论】:

    标签: c++ c cmake


    【解决方案1】:

    据我所知,这无法使用一组构建脚本来实现。但是,您可以做的是在您的工作区中有两个子目录:

    build/
    build/debug
    build/release
    

    然后做:

    $ cd build
    $
    $ cd build/debug
    $ cmake -DCMAKE_BUILD_TYPE=Debug ../..
    $ make
    $
    $ cd ../release
    $ cmake -DCMAKE_BUILD_TYPE=Release ../..
    $ make
    

    如有必要,您可以在build 目录中添加另一个构建脚本,如下所示:

    #!/bin/sh
    cd debug   && make && cd ..
    cd release && make && cd ..
    

    【讨论】:

    • Visual Studio sln 文件怎么样,它是否也只生成调试或仅发布配置,还是在同一个 .sln 文件中支持两者?
    • @user243655:好像生成了多个配置:DebugReleaseMinSizeRelRelWithDebInfo
    【解决方案2】:

    这可以使用ADD_CUSTOM_TARGET 命令来实现。例如,如果您想在 makefile 中同时添加调试和发布目标,请将以下内容添加到您的 CMakeLists.txt 文件中:

    ADD_CUSTOM_TARGET(debug
      COMMAND ${CMAKE_COMMAND} -DCMAKE_BUILD_TYPE=Debug ${CMAKE_SOURCE_DIR}
      COMMAND ${CMAKE_COMMAND} --build ${CMAKE_BINARY_DIR} --target all
      COMMENT "Creating the executable in the debug mode.")
    
    ADD_CUSTOM_TARGET(release
      COMMAND ${CMAKE_COMMAND} -DCMAKE_BUILD_TYPE=Release ${CMAKE_SOURCE_DIR}
      COMMAND ${CMAKE_COMMAND} --build ${CMAKE_BINARY_DIR} --target all
      COMMENT "Creating the executable in the release mode.")
    

    然后,用cmake配置后,可以运行make debug做debug目标,运行make release做release目标在同一目录下。

    【讨论】:

    • 如果我不希望它们在同一个目录中(但不同的子目录)怎么办?
    • @def: CMAKE_BINARY_DIR 是根据您运行cmake 命令的目录定义和缓存的。但是,在构建之后,我们可以将其安装到另一个位置。您还可以将构建可执行文件复制到单独的目录:
    猜你喜欢
    • 2021-06-09
    • 2011-06-14
    • 2020-09-19
    • 2019-10-23
    • 2013-09-16
    • 1970-01-01
    • 1970-01-01
    • 2011-10-02
    • 2014-08-16
    相关资源
    最近更新 更多