首页 > 编程语言 >C/C++多文件目录编译

C/C++多文件目录编译

时间:2024-06-03 20:57:29浏览次数:22  
标签:src 文件目录 header ++ helloworld 编译 C++ cpp main

本人的项目目录如下:

- helloworld
	- header
		helloworld.h
	- src
		helloworld.cpp
		main.cpp
	- bin
		a.exe

在编译g++ src/main.cpp src/helloworld.cpp -o bin/a.exe时控制台error: fatal error: header/helloworld.h: No such file or directory,源文件是这样#include"header/helloworld.h"

#include<>和#include" "的区别是前者在系统预定义的路径进行查找文件,后者在源文件当前目录为基准进行查找文件,默认在当前文件所在的目录中查找;
所以在编译时系统在src/目录下没有找到header/helloworld.h,因为header目录和src目录是同级目录,src下面根本就没有header目录,
后来更改成了#include "../header/helloworld.h",重新编译时才通过;
并且一般都是#include"相对路径",因为之前我的源文件是#include"header/helloworld.h",所以才找不到头文件,
当然不嫌麻烦写成绝对路径也可以进行编译,但是绝对路径本身就很繁琐。

-I 选项用于添加头文件搜索路径,例如:g++ src/main.cpp src/helloworld.cpp -o bin/a.exe -I header/基于当前工作目录(执行g++的目录),把当前目录下的header目录加入头文件搜索路径,因此源文件可以这样#include"helloworld.h"
-o 选项用于指定输出文件的名称;
-E 预编译,对源代码进行预处理,生成xx.i文件,例如:g++ -E main.cpp -o main.i;
-S 编译,把预处理的xx.i文件编译成汇编文件,生成xx.s文件,例如:g++ -S main.i -o main.s || g++ -S main.cpp -o main.s ;
-c 汇编,汇编代码转换为机器代码,不链接,生成xx.o文件,例如:g++ -c main.s -o main.o || g++ -c main.cpp -o main.o;
链接,不带指令,例如:`g++ main.o -o main.exe(main) || g++ main.cpp file1.cpp file2.cpp -o main.exe(main);

标签:src,文件目录,header,++,helloworld,编译,C++,cpp,main
From: https://www.cnblogs.com/wansuns/p/18229521

相关文章

  • c++——vector
    c++——vectorvector的介绍vector的简介迭代器的作用vector的迭代器失效问题可能导致vector迭代器失效的操作vector的模拟实现完整代码vector.hTest.h代码测试结果vector的介绍vector的文档介绍vector的简介vector是表示可变大小数组的序列容器。vector采用的连......
  • [C++] 小游戏 斗破苍穹 2.2.1至2.11.5所有版本(下) zty出品
    2.10.6#include<stdio.h>#include<iostream>#include<ctime>#include<bits/stdc++.h>#include<time.h>#include<windows.h>//SLEEP函数usingnamespacestd;intboss1=0,boss2=0;structPlayer{//玩家结构体,并初始化playercharname[21......
  • 编程奇境:C++之旅,从新手村到ACM/OI算法竞赛大门(武器:排序算法)
    引言现在你已经拥有了c++的基础语法知识,人物已经有了基本属性,那么想要打怪,手里必须要有趁手的武器,各种算法就是手中的武器,要根据怪物的不同特性来选择不同的武器。本章节讲的就是新手第一把武器:排序算法。所谓排序算法就是把一些乱序的序列按照从小到大或从大到小进行排序,是......
  • C++:priority_queue的模拟实现 | 仿函数
    ✨✨✨学习的道路很枯燥,希望我们能并肩走下来!文章目录文章目录前言一priority_queue的介绍二priority_queue的使用三 priority_queue的初步模拟实现四仿函数  4.1什么是仿函数4.2常见仿函数 ​编辑 4.3常见仿函数的模拟实现4.3.1less 4.3.2 gre......
  • c++在Linux下把gbk编码转为utf8编码类型
    #include<iostream>#include<string.h>#include<iconv.h>#include<memory>std::stringgbk_to_utf8(conststd::string&gbk_str){size_tin_len=gbk_str.size();size_tout_len=in_len*4;//设置足够大,确保可以存放转换后的UTF-8字符串std::uni......
  • C++用于开发大厅类规划展馆等设备终端开发实现还是很友好的
     C++用于开发大厅类规划展馆等设备终端开发实现还是很友好的......
  • C++的std::optional的用法
    C++的std::optional的用法在编程中,处理可能为空的变量或结果是一个常见的挑战。确实,传统的几种方法都有其局限性,可能导致代码的可读性和可维护性降低。如下的方式:使用特殊值标记:虽然使用特殊值(如-1、INFINITY、nullptr等)来标记无效或缺失的值很常见,但这种方法有其缺点。......
  • C++中的‘位’操作
    目录摘要基本位操作1.按位与(AND)`&`:2.按位或(OR)`|`:3.按位异或(XOR)`^`:4.按位取反(NOT)`~`:5.左移(LeftShift)`<<`:高级用法1.快速乘除以2的幂:2.交换两个数(不使用临时变量):3.检测奇偶性:4.清除最低位的1:5.获取最低位的1:6.统计二进制中1的个数:7.快速判断是否是2......
  • 编译原理:代替LR分析法的MP分析法
    LR分析法由Knuth先生于1965年开发。LR分析法存在一个问题:当文法产生式变多,分析表变大之后,占用很多内存。为了接近自然语言编程,需要大量的文法产生式,有可能分析表过大,内存里放不下。MP分析法,是multi-pass(多遍分析法)。词法分析和语法分析仍然是分开的,语法分析按照“先乘除......
  • 第23讲:编译和链接
    文章目录1.编译环境和运行环境2.翻译环境2.1预处理(预编译)2.2编译2.2.1词法分析:2.2.2语法分析2.2.3语义分析2.3汇编2.4链接3.运行环境1.编译环境和运行环境在ANSIC的任何一种实现中,存在两个不同的环境。1.第一种是翻译环境,在这个环境中源代码被转换为......