Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 制作或制作。我两者都需要吗?_C_Unix_Makefile_Cmake_Ctest_Cpack_Cdash - Fatal编程技术网

C 制作或制作。我两者都需要吗?

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是一个元构建系统

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

CMake是一个生成文件(和其他项目文件)的生成器。您不需要学习
make
,除非您要与CMake本身挂钩

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

  • 传递并行的
    -j
    标志
  • make V=1
    用于详细输出
  • 清洁
    清洁
  • makeinstall
    DESTDIR
    参数

CMake是一个元构建系统

使用
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脚本

  • 优点:CMake在C/C++项目中得到了广泛的应用/支持,作为您项目的潜在用户,我可以选择使用我的构建环境并选择工具(例如,我在我的项目中用替换了
    make

参考资料


@Rienhart\uz:我可以无耻地做广告吗?这是一个我自己制作的随时可用的CMake设置,它可以“展示”我在官方文档中发现的大量缺失?您可能会发现它有助于理解CMake的工作原理。