新手问题。我最近遇到了一个包含大量文件和外部库的项目。其中一些库包含Makefile和CMakeLists.txt。 我正在建立一个涉及外部图书馆的类似项目。是否有必要同时学习CMake和make。或者CMake是否足够?
答案 0 :(得分:5)
无需学习写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脚本。
好处:CMake在C / C ++项目中被广泛使用/支持,它让我作为项目的潜在用户可以选择采用我的构建环境并选择工具(例如我已经替换{{1在我的项目中使用ninja
。
<强>参考强>
答案 1 :(得分:2)
CMake是一个元构建系统。
使用cmake
和CMakeLists.txt
中的设置,CMake将生成目标平台的构建文件。这可能是Makefiles,Visual Studio解决方案,Ninja文件,KDevelop项目文件,......
如果项目设置为使用CMake,则您甚至不需要在生成的构建文件(Makefile)中查看。它们是严格暂时的。
答案 2 :(得分:0)
CMake是一个Makefile(和其他项目文件)生成器。你不需要学习make
,除非你想要加入CMake本身。
但是,一些经典的make
知识仍然有用,例如:
-j
标志为并行make V=1
表示详细输出make clean
进行清洁make install
和DESTDIR
参数