在linux下编译c++文件

  • 命令
    • g++ -c
      • 编译但不链接
      • 生成的文件.o
      • 自动生成filename.o
    • g++ -o
      • 生成可执行文件(编译+链接)
      • 生成可执行文件(.out,若不指明生成文件,则自动生成a.out),同时会执行得到结果
      • g++ main.o message.o -o output
      • g++ main.cpp message.cpp -o output
  • makefile
    • target: dependencies // 表示目标文件,以及生成目标文件的依赖
          aciton    // 生成目标文件的命令

      这里是主体,后面不管是宏定义还是头文件、库文件其实都是要加到命令(action)里面的

    • output: main.o message.o
          g++ main.o message.o -o output    // 编译后的文件链接得到最终可执行文件
      
      main.o main.cpp
          g++ -c main.cpp
      
      message.o message.cpp message.h
          g++ -c message.cpp                // 生成编译后的文件
      
      cleanup
          rm *.o output
      
    • 创建makefile,然后编辑makefile,在makefile相同的目录下面用make命令执行c++程序
    • make一次之后make会提示output已存在,需要make clean之后make(没有修改代码的情况下会这样,若做了修改系统会检测到并且make成功)
    • makefile的作用:
      • 表示依赖关系
      • 将命令写到一起,方便执行
    • makefile中添加第三方库和头文件的方法
      • 插入第三方库和头文件
      • 需要宏将第三方库和文件写进去,然后在命令中加上这两个宏,或者直接加在命令后面也可以
      • -L lib库的路径 -l 具体依赖的lib库
      • -I 头文件的路径
    • makefile中的.h文件
      • 添加到依赖中,不用写在命令里面
    • makefile中的32位和64位
      • 32位:-m32
      • 64位:-m64
    • makefile中的debug和release版本
    • makefile中的格式
      • #开头为注释
      • 必须加tab
    • makefile中宏定义
      • makefile中的宏定义
      • 宏实际上就是定义一个变量(别名),然后在makefile或者代码中会用到这个变量
      • 宏在makefile的使用方法
        • ifeq判断宏的大小,然后进行根据宏的大小进行不同的动作
          • ifeq ($(RELEASE),0)
                # debug
                CFLAGS += -g
            else
                # release
                CFLAGS += -static -O3 -DNDEBUG
                LFLAGS += -static
            endif

        • 用$(宏)在makefile中使用这个宏
      • 宏在代码中的使用方法
        • #include <iostream>
           
          using namespace std;
           
          int main(int argc, char* argv[])
          {
          #ifdef _DEBUG
          	cout << "using debug..." << endl;
          #endif
          	cout << "stop..." << endl;
          }

          详情见宏在代码中的使用

      • 宏定义

        • vs ---- 项目 ---- 属性 ------ c/c++ ----- 预处理器 ---- 预处理器定义

  • makefile的一个实例

    • 详情见奋斗-少年的博客

    • CROSS =     //在开发时候,有时候会有嵌入式的选项
      CC = $(CROSS)gcc
      CXX = $(CROSS)g++
      DEBUG = -g -O2   //这里一般设置为空,在编译时候手动指定,例如:make DEBUG="-g -O2",如果使用release版本就不用这个
      CFLAGS = $(DEBUG) -Wall -c
      RM = rm -rf
       
      SRCS = add.cpp sub.cpp mul.cpp main.cpp   //最笨的方法,将所有的.cpp文件添加到SRCS中
      OBJS = $(patsubst %.cpp, %.o, $(SRCS))       //通过*.cpp文件获得同名的*.o文件
       
      VERSION = 1.0.0.0   //版本信息,这里的版本信息只是用来加在生成可执行文件的后面
      TARGET = test.$(VERSION) //组装文件名和版本信息
       
      $(TARGET) : $(OBJS) //连接
          $(CXX) $^ -o $@
       
      $(OBJS):%.o : %.cpp   //生成*.o文件
          $(CXX) $(CFLAGS) $< -o $@
       
      clean:
          $(RM) $(TARGET) *.o 

相关链接:1 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值