【发布时间】:2017-09-25 00:01:16
【问题描述】:
新手问题。我最近遇到了一个包含大量文件和外部库的项目。其中一些库包含 Makefile 和 CMakeLists.txt。 我正在构建一个涉及外部库的类似项目。是否有必要同时学习 CMake 和 make。还是 CMake 就足够了?
【问题讨论】:
新手问题。我最近遇到了一个包含大量文件和外部库的项目。其中一些库包含 Makefile 和 CMakeLists.txt。 我正在构建一个涉及外部库的类似项目。是否有必要同时学习 CMake 和 make。还是 CMake 就足够了?
【问题讨论】:
无需学习编写makefile,因为CMake 是abstraction layer 或“meta-make”为您生成makefile。并且作为任何抽象层,您只需要学习使用它的功能。但是您还需要了解其开发的任务。在这种情况下,例如What is a build tool? 或 What is a native build environment?
但是cmake - 结合ctest、cpack 和cdash - 远不止这些,它确实(大部分)消除了学习编译器/链接器开关、平台/框架处理的需要库/可执行文件及其安装等。
根据我在项目中使用 CMake 的经验:
缺点:您需要在所有目标环境中对其进行测试(诚然,这对 CMake 没有任何特殊性)。在封闭的环境中(例如公司内部),它相对容易维护,但在例如在开源设置中,总会有一个或其他先例,您需要稍微调整您的 CMake 脚本。
ninja)。
参考文献
【讨论】:
CMake 是一个 Makefile(和其他项目文件)生成器。你不需要学习make,除非你打算使用 CMake 本身。
不过,一些经典的make知识还是有用的,比如:
-j 标志make V=1 用于详细输出make clean打扫make install 和 DESTDIR 参数【讨论】:
CMake 是一个元构建系统。
使用cmake 和CMakeLists.txt 中的设置,CMake 将为目标平台生成构建文件。这可能是 Makefile、Visual Studio 解决方案、Ninja 文件、KDevelop 项目文件……
如果项目设置为使用 CMake,您甚至不需要查看生成的构建文件 (Makefile)。它们完全是临时的。
【讨论】: