cmake - 使用 make 和 Cmake 而不是从命令行编译的优点?
问题描述
我总是从命令行在 G++ 下编译我所有的 C++ 代码。
为什么人们使用 Cmake 和 gcc make 之类的东西,有什么优点?
如果确实有理由,我如何将我的项目转换为使用 makefile?
现在,我只使用一个文本文件,其中包含我需要分段编译项目的所有命令列表,当然,如果我觉得我想重新编译每个 c 和 cpp 文件,编译整个项目的那个。
解决方案
我只是使用一个包含编译项目所需的所有命令列表的文本文件......
这不是一个可移植的标准化解决方案,它是您个人工作流程所独有的。A Makefile
orCMakefile
允许您描述如何将代码编译到计算机而不是人类,因此其他人可以运行一两个简单的命令并(希望)获得与您相同的结果。
您的方法现在可能行得通,但是对于一个包含数千个源文件、数十万个错综复杂的交叉依赖项并且需要数小时编译的非平凡项目,您将需要自动化。
例如,您的文本文件可能包含:
g++ input.cpp output -lstdc++
这是最简单的情况,一个源文件,一个输出文件,一个库。在非平凡代码中,命令如下所示:
g++ -m32 -c -g -Wall -Iinclude -Isrc -I../Perlingo\ Shared\ Objects -include include -fPIC -MMD -MP -MF "build/Debug/GNU-Linux-x86/src/BhamEvent.o.d" -o build/Debug/GNU-Linux-x86/src/BhamEvent.o src/BhamEvent.cpp
这只是对您可能需要包含多少标志和选项以正确编译某些内容的尝试。其中一些路径是存储在 or 中的变量,由or之Makefile
类的工具放入其中。cmake
configure
关于 a 的最好的事情之一Makefile
是您可以使用类似的标志进行并行构建,这样-j8
可以同时构建多达八件事。
推荐阅读
- java - Firebase Android 数据库查询(读取数据)
- java - Java 获取节点的标签名称
- javascript - 推送到 Heroku
- python - ValueError:randrange() 的空范围 (6,6, 0)
- r - 条件结构,R
- objective-c - 如何使用其他 objc 函数的变量?(长按并添加按钮)
- visual-studio-code - 如何将一长行代码粘贴到vs code mac中的多行
- git - Git 提示每个 git 命令的用户名和密码
- c - strdup 非依赖实现(转储 malloc 依赖)
- c# - Nunit-Console:有没有办法使用带有命令行选项的测试选择语言