与 Java 和 Python 相比,为啥每次使用 Cmake 运行 C++ 程序都需要这么长时间?
Posted
技术标签:
【中文标题】与 Java 和 Python 相比,为啥每次使用 Cmake 运行 C++ 程序都需要这么长时间?【英文标题】:Why does running a C++ program using Cmake takes so long each time compared to Java and Python?与 Java 和 Python 相比,为什么每次使用 Cmake 运行 C++ 程序都需要这么长时间? 【发布时间】:2019-08-16 06:17:30 【问题描述】:在 Java 和 Python 中,一旦构建了骨架,以后的运行就不需要这么长时间了。我正在使用 CLion。有什么我想念的吗?我每次运行都会看到以下消息,大约需要 1 分钟。 谢谢
Scanning dependencies of target adaboost_star_over_zdds
[ 20%] Building CXX object CMakeFiles/adaboost_star_over_zdds.dir/main.cc.o
[ 40%] Linking CXX executable adaboost_star_over_zdds.exe
[100%] Built target adaboost_star_over_zdds
Build finished
【问题讨论】:
在“每次运行”之前,您是否修改了main.cc
中的任何内容?还是您的CMakeLists.txt
文件配置错误?
只是添加一个简单的 cout 语句。整个代码中这样的小改动是否会导致每次构建时间较长?
如果您更改源文件,即使只是添加、删除或更改单个字符,也意味着需要重新构建整个源文件并重新链接应用程序。这是 C++ 等编译语言的主要缺点之一。如果您不更改任何内容,则不需要重新构建应用程序,但 CLion 在运行时仍会执行一些与构建相关的步骤(只是为了确保)。
【参考方案1】:
这不是“运行”程序,这是“构建”程序。这需要很长时间,因为必须读取包含文件,预处理器和编译器会多次遍历代码,然后是汇编器,最后是链接器。
如果像您的示例那样构建单个文件需要很长时间,那么您可能会包含一些在编译时大量使用预处理器和/或模板魔法来生成大量代码的东西。
【讨论】:
我知道跑步和建造的区别。正如我所说,每次“运行”都会出现。我认为 cmets 中所说的是问题所在。我只添加了一个 cout,每次我“运行”代码时,它都会完成整个构建过程。根据该评论,如果我稍微更改代码,就没有办法了。 它在问题的标题中说“运行程序”...但无论如何:取决于代码以及编译需要这么长时间的原因。如果您可以将其提取到一个单独的模块中,该模块可以编译一次,然后只链接/使用而不需要每次都更改它,那么更改主程序会变得更快。 "大量使用预处理器和/或模板魔法"...即 C++ Boost 库 :) 是的@Rene,我在命令行中使用 g++ 和 Makefile 并分离我的文件和函数以加快进程。谢谢。 是的,你是对的,这可能是一个原因。 :) @squareskittles以上是关于与 Java 和 Python 相比,为啥每次使用 Cmake 运行 C++ 程序都需要这么长时间?的主要内容,如果未能解决你的问题,请参考以下文章
为啥 NegativeBinomialP 与 R 相比给出不同的系数?
与基于摇摆的图表相比,为啥基于 javafx 的图表占用更多内存
为啥不推荐使用 JSX 转换?与 JSX 转换相比,使用 Babel 有啥优势?
为啥 np.hypot 和 np.subtract.outer 与香草广播相比非常快?使用 Numba 并行加速 numpy 进行距离矩阵计算