• g++ 重要编译参数


    一. -g 产生带调试信息的可执行文件test

    产生带调试信息的可执行文件test,如果不加-g,输出的test是不包含调试信息的。加了-g 才可以被GDB所调试。

    g++ -g test.cpp -o test
    
    • 1

    二. -o 优化源代码

    优化指省略掉代码中从未使用过的变量,直接将常量表达式用结果值代替等。
    这些操作会缩减目标文件的所包含的代码量,提高最终生成的可执行文件的运行效率。
    
    • 1
    • 2

    一般使用 -o2 ,表示g++产生尽可能小和尽可能快的代码

    g++ -o2 test.cpp 
    
    • 1

    在这里插入图片描述

    -o 参数实例

    vim inefficiency.cpp
    
    • 1
    #include 
    using namespace std;
    
    int main(void)
    {
    	unsigned long int counter;
    	unsigned long int result;
    	unsigned long int temp;
    	unsigned int five;
    	int i;
    	// 每个for训练,都计算counter的值
    	for (counter=0;counter<2009*2009*100/4 + 2010;counter+=(10-6)/4)
    	{
    		temp = counter/1979;
    		for (i=0;i<20;i++)
    		// 每一次for循环 都计算一个常量
    			five = 200 * 200 /8000;
    			result = counter;
      }
      cout <<"result="<<result<<endl;
      return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    # 不使用优化参数生成一个可执行文件
    g++ inefficiency.cpp -o a_without_0
    
    • 1
    • 2
    # 使用-o2参数优化该冗余代码,生成一个更高效的可执行文件 a_with_02
    g++ inefficiency.cpp -o2 -o a_with_o2
    
    • 1
    • 2
    ls -lh
    
    • 1

    在这里插入图片描述

    执行没有优化的可执行文件,并显示执行时间:

    time ./a_without_0
    
    • 1

    执行优化后的可执行文件,并显示执行时间:

    time ./a_with_o2
    
    • 1

    看第一个时间即可。优化后的代码时间减少。
    优化后的速度是比较宽ia快的

    三. -l 和 -L 指定要链接的库文件 | 指定要链接的库文件路径

    # 链接glog库
    # 在/lib和/usr/lib 和 /usr/local/lib 中的库,直接用-l参数就能链接
    g++ -lglog test.cpp
    
    • 1
    • 2
    • 3
    # 如果库文件没放上面三个目录里,需要使用-L参数指定库文件所在目录
    # 链接/home/bing/mytestlibfolder路径下的mytest库文件
    g++ -L/home/bing/mytestlibfolder -lmytest test.cpp
    
    • 1
    • 2
    • 3

    四. -I (大写的i) 指定头文件搜索目录

    i是include的缩写,/usr/include目录一般是不用指定的,gcc知道去哪里找,但是如果头文件不在/usr/include里,我们就要用-I来指定。比如头文件在/myinclude目录里,编译命令行要加上 -I/myinclude参数。如果不加会得到一个 xxxx.h:No such file or directory的错误。

    -I 可以用相对路径,比如头文件在当前目录下。

    g++ -I/myinclude test.cpp
    
    • 1

    五. -Wall 打印警告信息

    g++ -Wall test.cpp
    
    • 1

    六. 关闭警告信息

    g++ -w test.cpp
    
    • 1

    七. -std=c++11 设置编译标准

    # 使用c++11标准编译test.cpp
    g++ -std=c++11 test.cpp
    
    • 1
    • 2

    如果不指定,那么会使用默认的,比如是c++98,那么它就不包含c++11的特性。

    八. -o 指定输出文件名

    g++ test.cpp -o test
    
    • 1

    九. -D 定义宏

    # 定义 DEBUG宏
    # 如果文件中有DEBUG宏部分的相关信息,用DDEBUG来选择开启或关闭DEBUG
    g++ -DDEBUG main.cpp
    
    • 1
    • 2
    • 3

    对下面的main.cpp文件定义DEBUG之后,才会执行 #ifdef DEBUG后面的语句。

    #include 
    int main()
    {
    	#ifdef DEBUG
    		printf("DEBUG LOG\n");
    	#endif
    		printf("in\n");
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    十. 查看GCC命令使用手册

    man gcc
    
    • 1

    在这里插入图片描述

  • 相关阅读:
    R语言生物群落(生态)数据统计分析与绘图实践技术应用
    OpenAI开发者大会:定义未来AI的新功能、愿景和商业版图
    图像识别技术在不同场景下有哪些应用?
    SpringBoot如何优雅的输出异常信息?
    无胁科技-TVD每日漏洞情报-2022-8-7
    JavaScript设计模式之责任链模式
    【Linux笔记】Linux环境变量与地址空间
    C++打怪升级(十一)- STL之list
    python判断语句
    宝塔面板快速搭建贪吃蛇小游戏web网站 - 无需云服务器,网站发布上线
  • 原文地址:https://blog.csdn.net/qq_42864343/article/details/133990706