我正在建立一个涉及外部图书馆的类似项目.是否有必要同时学习CMake和make.或者CMake是否足够?
解决方法
无需学习编写makefile,因为CMake是abstraction layer或“Meta-make”为您生成makefile.作为任何抽象层,您只需要使用其功能进行学习.但是你还需要了解它的开发任务.在这种情况下,What is a build tool?或What is a native build environment?
What does the “c” in cmake stand for?
但是cmake – 与ctest,cpack和cdash结合 – 远不止于此,它(大部分)确实消除了学习编译器/链接器开关,平台/框架处理库/可执行文件及其安装等的需要.
>交叉编译
>它支持CMake Generators中汇总的许多不同的构建环境输出格式
>它确实例如在CMake Compile Features中抽象出特定的编译器开关
>跨平台
>它适用于所有类型的操作系统(概述于CMake’s Download Page),具有不同的设置
>它适用于或直接集成到许多IDE或editors中,例如,Visual Studio或CLion
>它可以交叉编译到特定的目标平台,例如Android总结于CMake Toolchains
>跨语言
>它主要支持C/C++,但也支持例如Asm,RC,Fortran和CMake version 3.8 C#
>它确实消除了学习其他脚本语言(通常用于执行构建前或构建后步骤)的需要,因为它嵌入了中型脚本语言
Difference between using Makefile and cmake to compile the code
根据我在项目中使用CMake的经验:
>缺点:您需要对所有目标环境进行测试(诚然,这对CMake来说并不具体).在封闭的环境中(例如在公司内部),它相对容易维护,但在例如一个开源设置,总会有一个或其他先例,你需要稍微调整一下你的CMake脚本.
>好处:CMake在C/C++项目中得到广泛使用/支持,它使我作为项目的潜在用户可以选择采用我的构建环境并选择工具(例如我在项目中用ninja
替换了make).
参考