C 制作或制作。我两者都需要吗?
新手问题。我最近遇到了一个包含大量文件和外部库的项目。其中一些库包含makefile和CMakeLists.txt。 我正在建设一个类似的项目,涉及外部库。有必要同时学习CMake和make吗。或者CMake是否足够?CMake是一个生成文件(和其他项目文件)的生成器。您不需要学习C 制作或制作。我两者都需要吗?,c,unix,makefile,cmake,ctest,cpack,cdash,C,Unix,Makefile,Cmake,Ctest,Cpack,Cdash,新手问题。我最近遇到了一个包含大量文件和外部库的项目。其中一些库包含makefile和CMakeLists.txt。 我正在建设一个类似的项目,涉及外部库。有必要同时学习CMake和make吗。或者CMake是否足够?CMake是一个生成文件(和其他项目文件)的生成器。您不需要学习make,除非您要与CMake本身挂钩 但是,一些经典的make知识仍然有用,例如: 传递并行的-j标志 make V=1用于详细输出 清洁清洁 makeinstall和DESTDIR参数 CMake是一个元构建系统
make
,除非您要与CMake本身挂钩
但是,一些经典的make
知识仍然有用,例如:
- 传递并行的
标志-j
用于详细输出make V=1
清洁清洁
和makeinstall
参数DESTDIR
cmake
和CMakeLists.txt
中的设置,cmake将生成目标平台的构建文件。可能是Makefiles、VisualStudio解决方案、Ninja文件、KDevelop项目文件
如果将项目设置为使用CMake,则您甚至不需要查看生成的构建文件(makefile)。它们完全是暂时的
无需学习编写makefile
,因为CMake是为您生成makefile的工具或“metamake”。作为任何抽象层,您只需要学习如何使用它的功能。但是你也需要了解它是为什么而开发的。在这种情况下,例如,或
但是,与和相结合,它确实(大部分)消除了学习编译器/链接器开关、平台/框架处理库/可执行文件及其安装等的需要
- 交叉编译
- 它支持许多不同的生成环境输出格式,如中所述
- 例如,它会抽象特定的编译器开关
- 跨平台
- 它可以在具有不同设置的所有类型的操作系统(总结在上)上工作
- 它与许多IDE或类似IDE一起工作,或直接集成到其中,例如
- 它可以交叉编译到特定的目标平台,如
- 跨语言
- 它主要支持C/C++但也支持Asm、RC、Fortran和with
- 它确实消除了学习其他脚本语言(通常用于执行构建前或构建后步骤)的需要,因为它嵌入了中型脚本语言
- 缺点:您需要在所有目标环境中对其进行测试(无可否认,这对CMake来说并没有什么特别之处)。在一个封闭的环境中(例如在公司内部),它相对容易维护,但在一个开放源代码环境中,总会有这样或那样的先例,你需要稍微调整一下你的CMake脚本
- 优点:CMake在C/C++项目中得到了广泛的应用/支持,作为您项目的潜在用户,我可以选择使用我的构建环境并选择工具(例如,我在我的项目中用替换了
)make