一些常用 CMake 模板

2016-05-07 22:05:46 +08:00
 dvorak4tzx

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

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

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

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

这些模板的第一原则是精简,适合入门。我项目李用的 CMakeLists 通常都比这复杂(很多平台的判断,对编译、链接的控制,等)。在这几个简单的例子之后,我会添加一两个综合性地例子。谢谢关注,欢迎 PR 。
xuboying
2016-05-08 03:34:35 +08:00
我只会用 vsGUI ,请教楼主 cmake 怎么 target debug 和 release 版本?
dvorak4tzx
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
2016-05-08 12:44:42 +08:00
谢谢分享,已 star ,正准备采用 CMake 来管理 Windows 和 Linux 下的 C++工程项目
secondwtq
2016-05-08 13:07:38 +08:00
一直用 JetBrains 家 CLion 的,官方钦定用 CMake
后来我就全换 CMake 了
不过 VS 居然还可以用,涨姿势了
xuboying
2016-05-08 15:13:21 +08:00
@dvorak4tzx 你看下工程属性的编译选项,其实是可以区分的, debug 会带 _debug 宏,参数是 MDd/MTd , release 是 MD /MT
dvorak4tzx
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
2016-05-08 16:30:51 +08:00
@xuboying 不过好像也有说可以直接在生成 *sln 的时候指定的: http://stackoverflow.com/a/35580404

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/277037

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX