linux下c++编程环境搭建,运行过程以及调试,内含C++头文件源文件编译过程链接

同一段c语言代码,windows下运行要4分30多秒,ubuntu下只要35秒,为什么会这样?ubuntu还是在虚拟机里运行的,在windows下怎样让电脑运行指定程序拉高cpu。
解答1

这有关操作系统中的进程管理.
拉高CPU运行,所指的其实就是提高优先级,平常使用的都是相同优先级进程,
你提高优先级后,CPU就多跑你的进程,
而windows提高优先级的函数请参考windows下相关API
两个系统为什么不同,要看到底有多少相同或更高级别任务运行,windows任务较多,所以跑到你的进程就比较少.这个你最好看看任务数量.

liunx系统内核和硬盘格式与windows都不同,但这不是主要原因。主要是windows的时间主要花在了输出上。建议windows用文件输出。

实际上这个主要时间消耗到显示上面了,只输出最后的i的话,也就几个毫秒的事

因为linux很轻,而且开源,有很多支持者。它没有图形用户界面,一切都是代码操作,注重效率,一般是给计算机行业的人用的,特别是当做服务器!
而windows是给大众用的,所以关注的地方比较多,特别是他的图形用户界面。所以程序运行效率比不上linux。

作者:辉常哥
链接:https://www.zhihu.com/question/36609459/answer/89743845
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

解答2

1.gcc是GNU Compiler Collection(就是GNU编译器套件),也可以简单认为是编译器,它可以编译很多种编程语言(括C、C++、Objective-C、Fortran、Java等等)。2.当你的程序只有一个源文件时,直接就可以用gcc命令编译它。3.但是当你的程序包含很多个源文件时,用gcc命令逐个去编译时,你就很容易混乱而且工作量大4.所以出现了make工具make工具可以看成是一个智能的批处理工具,它本身并没有编译和链接的功能,而是用类似于批处理的方式—通过调用makefile文件中用户指定的命令来进行编译和链接的。5.makefile是什么?简单的说就像一首歌的乐谱,make工具就像指挥家,指挥家根据乐谱指挥整个乐团怎么样演奏,make工具就根据makefile中的命令进行编译和链接的。6.makefile命令中就包含了调用gcc(也可以是别的编译器)去编译某个源文件的命令。7.makefile在一些简单的工程完全可以人工手下,但是当工程非常大的时候,手写makefile也是非常麻烦的,如果换了个平台makefile又要重新修改。8.这时候就出现了Cmake这个工具,cmake就可以更加简单的生成makefile文件给上面那个make用。当然cmake还有其他功能,就是可以跨平台生成对应平台能用的makefile,你不用再自己去修改了。9.可是cmake根据什么生成makefile呢?它又要根据一个叫CMakeLists.txt文件(学名:组态档)去生成makefile。10.到最后CMakeLists.txt文件谁写啊?亲,是你自己手写的。11.当然如果你用IDE,类似VS这些一般它都能帮你弄好了,你只需要按一下那个三角形

作者:任卫
链接:https://www.zhihu.com/question/36609459/answer/68231785
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

解答3

gcc是编译器,其实后还有连接器等make是另外一个程序,根据makefile的指示,尽可能协调编一个程序套件的编译全过程,一个程序套件可能包好多多源代码,也可能生成若干二进制文件,还可能指示程序套件的安装程序制作和/或安装过程,那make就通过调用编译器连接器还有其他外部工具达成这一系列工作。make不光可以调用gcc编译器,也可以调用javac啊。makefile精力集中于定义工作流水线。CMake 是另外一个更高层一点的工具,它的输出是makefile等。支持使用更简单的语言描述编译安装过程。支持多个makefile系列、VisualStudio等下午补充下推荐使用场景:1 gcc编译器套件:最简单啦,单文件工程比如helloworld直接使用就行了2 make&makefile : 小中大型工程肯定要用的啦,大型工程的makefile系统不少也都是噩梦般的存在。适用于工具链【较为统一】的工程中,有一定跨平台能力。3 CMake:若需要更为广泛的支持多编译工具链更广地跨平台且还不想构建复杂的跨平台makefile系统,那CMake确实是个很好的选择,由CMake来先编译出不同平台的makefile工程,而CMakeLists.txt集中声明描述下工程组件的关系即可。

实战总结

cmake是用来生成Makefile文件的工具,生成Makefile文件的工具不止有cmake,还有autotools。Qt环境下还有qmake

Windows安装GNU编译器使用makefile
我在电脑下D:\Program Files\TDM-GCC\bin修改mingw32-make.exe为make.exe。

探索makefile文件执行顺序(前一个是makefile文件内容,后面是运行结果)

注意头文件.h不需要编译。

尝试一

1
2
3
4
5
6
7
8
Main: Boy.o Main.o
g++ Boy.o Main.o -o Main

Main.o: Main.cpp
g++ -c Main.cpp -o Main.o

Boy.o: Boy.cpp
g++ -c Boy.cpp -o Boy.o
1
2
3
4
C:\Users\Administrator\Desktop\Boy>make
g++ -c Boy.cpp -o Boy.o
g++ -c Main.cpp -o Main.o
g++ Boy.o Main.o -o Main

猜测:从上往下执行,首先Boy.o就去找第三步得到结果Boy.o,然后Main.o就去第二步得到结果Main.o,最好第一步准备工作完成,运行第一步。

尝试二

1
2
3
4
5
6
7
8
Main: Boy.o Main.o
g++ Boy.o Main.o -o Main

Boy.o: Boy.cpp
g++ -c Boy.cpp -o Boy.o

Main.o: Main.cpp
g++ -c Main.cpp -o Main.o
1
2
3
4
C:\Users\Administrator\Desktop\Boy>make
g++ -c Boy.cpp -o Boy.o
g++ -c Main.cpp -o Main.o
g++ Boy.o Main.o -o Main

猜想印证,结果一样。

尝试三

1
2
3
4
5
6
7
8
Main.o: Main.cpp
g++ -c Main.cpp -o Main.o

Main: Boy.o Main.o
g++ Boy.o Main.o -o Main

Boy.o: Boy.cpp
g++ -c Boy.cpp -o Boy.o
1
2
3
4
C:\Users\Administrator\Desktop\Boy>make
Makefile:2: *** missing separator. Stop. //这里是分隔符错误
//正确的结果是只会得到第一个结果main.o,原因就是Main.cpp编译的时候应该会出现编译错误,然而却得到编译结果,答案在尝试四给出。
g++ -c main.cpp -o main.o

尝试四

1
2
3
4
5
6
7
8
Boy.o: Boy.cpp
g++ -c Boy.cpp -o Boy.o

Main.o: Main.cpp
g++ -c Main.cpp -o Main.o

Main: Boy.o Main.o
g++ Boy.o Main.o -o Main
1
g++ -c Boy.cpp -o Boy.o

从结果中可以看出,在Makefile文件这样写也会只运行第一步就结束了。可以总结:makefile文件只会执行到第一步,如果第一步有准备文件,就去寻找,直到第一步完成,前面的几次尝试只是刚好把最终的执行文件main放在了第一步。如果要解决这个问题,所以常常在makefile执行的时候使用命令:make all。这个all又怎么操作昵?只需要在Makefile文件这样写:

1
2
3
4
5
6
7
8
9
10
11
#在all后面写最后得到的执行结果文件即可
all: Main

Boy.o: Boy.cpp
g++ -c Boy.cpp -o Boy.o

Main: Boy.o Main.o
g++ Boy.o Main.o -o Main

Main.o: Main.cpp
g++ -c Main.cpp -o Main.o

g++-c 参数表示将源文件编译成object(目标文件)。 即 g++ -c .cpp 会编译成 .cpp

g++ 不加参数时会编译且尝试链接成可执行文件,然而 class_name.cpp(就是类的实现) 的代码中没有main函数的定义,所以最终无法成功链接,故报错。

比如在写好类的实现时,编译这个.cpp文件,就会报错,我还以为是出什么问题了,检查了好久。。。。