制作或制作。我需要两个吗?

时间:2017-04-27 09:16:26

标签: c unix makefile cmake

新手问题。我最近遇到了一个包含大量文件和外部库的项目。其中一些库包含Makefile和CMakeLists.txt。 我正在建立一个涉及外部图书馆的类似项目。是否有必要同时学习CMake和make。或者CMake是否足够?

3 个答案:

答案 0 :(得分:5)

How to frame the concept behind 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?

但是 - 与结合使用 - 远不止于此,它(大部分)消除了学习编译器的需要/链接器开关,您的平台/框架处理库/可执行文件及其安装等。

  • 交叉编译
  • 跨平台
  • 跨语言
    • 它主要支持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 ++项目中被广泛使用/支持,它让我作为项目的潜在用户可以选择采用我的构建环境并选择工具(例如我已经替换{{1在我的项目中使用ninja

<强>参考

答案 1 :(得分:2)

CMake是一个元构建系统。

使用cmakeCMakeLists.txt中的设置,CMake将生成目标平台的构建文件。这可能是Makefiles,Visual Studio解决方案,Ninja文件,KDevelop项目文件,......

如果项目设置为使用CMake,则您甚至不需要在生成的构建文件(Makefile)中查看。它们是严格暂时的。

答案 2 :(得分:0)

CMake是一个Makefile(和其他项目文件)生成器。你不需要学习make,除非你想要加入CMake本身。

但是,一些经典的make知识仍然有用,例如:

  • 传递-j标志为并行
  • make V=1表示详细输出
  • make clean进行清洁
  • make installDESTDIR参数