V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
dvorak4tzx
V2EX  ›  程序员

一些常用 CMake 模板

  •  
  •   dvorak4tzx · 2016-05-07 22:05:46 +08:00 · 4118 次点击
    这是一个创建于 3126 天前的主题,其中的信息可能已经有所发展或是发生改变。

    自己经常建立一些工程,各种从别的地方拷贝 CMakeLists 片段,很麻烦。

    所以整理了一份无比清爽简洁的 templates 。关键词: C , C++, Qt , CMake , OpenCV , BOOST 。

    地址:district10/cmake-templates: Some CMake Templates.

    12 条回复    2016-05-08 16:30:51 +08:00
    kendetrics
        1
    kendetrics  
       2016-05-07 22:56:00 +08:00
    感谢分享
    lsmgeb89
        2
    lsmgeb89  
       2016-05-07 23:03:48 +08:00 via Android
    奥,不错
    tobyxdd
        3
    tobyxdd  
       2016-05-07 23:04:11 +08:00 via Android
    不错 不过怎么没有 qt5 的
    dvorak4tzx
        4
    dvorak4tzx  
    OP
       2016-05-07 23:09:40 +08:00
    @tobyxdd 因为我们是实验室还在用 Qt4 ,没有换 Qt5 的意向(毕竟对 Qt5 需求不大,而 Qt5 变动太大)。
    dvorak4tzx
        5
    dvorak4tzx  
    OP
       2016-05-07 23:42:04 +08:00
    OpenCV3 的还没有测试。 Qt5 的这两天会添加(看了一下 [官网的教程]( http://doc.qt.io/qt-5/cmake-manual.html) 似乎还不那么简单)。

    这些模板的第一原则是精简,适合入门。我项目李用的 CMakeLists 通常都比这复杂(很多平台的判断,对编译、链接的控制,等)。在这几个简单的例子之后,我会添加一两个综合性地例子。谢谢关注,欢迎 PR 。
    xuboying
        6
    xuboying  
       2016-05-08 03:34:35 +08:00 via Android
    我只会用 vsGUI ,请教楼主 cmake 怎么 target debug 和 release 版本?
    dvorak4tzx
        7
    dvorak4tzx  
    OP
       2016-05-08 09:32:01 +08:00
    @xuboying 你是说如果直接用 CMake 生成 Visual Studio 的 Release 和 Debug 版本?简单的说是不可以,因为 VS 有自己的方式来 build debug 和 release (甚至自定义的 build )。我记得 CMake 文档里提到过。

    或者你是说怎么用 CMake 和 VS ?刚写了一个 Issue :[HOWTO: CMake + Visual Studio 2010 · Issue #1 · district10/cmake-templates]( https://github.com/district10/cmake-templates/issues/1)。
    patrickstar
        8
    patrickstar  
       2016-05-08 12:44:42 +08:00
    谢谢分享,已 star ,正准备采用 CMake 来管理 Windows 和 Linux 下的 C++工程项目
    secondwtq
        9
    secondwtq  
       2016-05-08 13:07:38 +08:00
    一直用 JetBrains 家 CLion 的,官方钦定用 CMake
    后来我就全换 CMake 了
    不过 VS 居然还可以用,涨姿势了
    xuboying
        10
    xuboying  
       2016-05-08 15:13:21 +08:00 via Android
    @dvorak4tzx 你看下工程属性的编译选项,其实是可以区分的, debug 会带 _debug 宏,参数是 MDd/MTd , release 是 MD /MT
    dvorak4tzx
        11
    dvorak4tzx  
    OP
       2016-05-08 16:27:51 +08:00
    VS 当然有“能力”区分 release 和 debug ,只是说 cmake 不能直接在 CMakeLists 里配置「生成工程是 debug 还是 release 属性」( GNUMake 工程可以)。参考: http://stackoverflow.com/questions/19024259/how-to-change-the-build-type-to-release-mode-in-cmake/20423820#20423820

    在 Linux 上,`cmake -DCMAKE_BUILD_TYPE=Release ..` 可以直接生成 release 版本的 Makefile ,然后 `make` 就会生成 release 版本的 binary ;但对于 Visual Studio 工程,用 CMake-GUI 其实等价于命令行运行:

    ```
    cmake.exe -G"Visual Studio 10 2010 Win64" ..
    ```

    加不加 `-DCMAKE_BUILD_TYPE=Release` 没区别(因为 VS 工程只能在编译的时候选择编译选项)。
    dvorak4tzx
        12
    dvorak4tzx  
    OP
       2016-05-08 16:30:51 +08:00
    @xuboying 不过好像也有说可以直接在生成 *sln 的时候指定的: http://stackoverflow.com/a/35580404
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1964 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 00:01 · PVG 08:01 · LAX 16:01 · JFK 19:01
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.