【问题标题】:G++ how to compile a .h that is in a different directory with .cppG ++如何使用.cpp编译位于不同目录中的.h
【发布时间】:2014-11-06 12:14:46
【问题描述】:

G++ 如何使用 .cpp 编译位于不同目录中的 .h
例如,我的文件夹是“header”和“src”,在 header 文件夹中有我的 .h ,src 有我的所有 .cpp 也有我的 main.cpp 。

【问题讨论】:

  • 命令行中g++的选项-I

标签: c++ linux compilation makefile g++


【解决方案1】:

例如:

g++ -I header src/main.cpp src/other.cpp

现在您的 .cpp 文件可以执行以下操作:

#include <blah.h>

他们会找到header/blah.h

【讨论】:

  • 可以在 makefile 中实现吗?
  • omg,说真的,因为我是这些 g++ 的新手,你能告诉我完整的 makefile 代码吗? :\ 例如:header 文件夹将具有 > prime.h 和 src 文件夹将具有 prime.cpp 和 main.cpp。
  • @user3551743:不,我不会为你编写 Makefile。有很多教程。或者更好的是,使用 CMake 自动编写您的 Makefile。
【解决方案2】:

首先.h 永远不会被编译,只有源文件被编译。您可以在源文件中包含该标头的相对路径。例如:_

sys.cpp 

#include "../header/sys.h"

已编辑:-

@Lightness 在轨道上比赛:-

我小时候学到的是,当我们编译一个程序时,第一个预处理器就会出现,它将 .h 文件扩展为包含在源文件中的任何位置。然后将生成的源文件提供给编译器,然后继续进行进一步处理。所以编译器甚至不知道 .h 文件是什么。如果我忘记/误解了什么,请纠正我

【讨论】:

  • 标题是绝对编译的。只是它们在某种程度上是间接编译的。
  • 我的猜测是@ravi 的意思是通常翻译单元是用源文件制作的,而不是纯粹的包含文件(包含文件是与#include 指令一起使用的任何文件)。也就是说,如果有指示,编译器不会过多关注文件扩展名,而处理器几乎允许任何事情。
  • 你能在这里写一个简单的makefile代码吗? :\ 示例头文件有 prime.h 和 src 文件有 prime.cpp 和 main.cpp
猜你喜欢
  • 1970-01-01
  • 2011-03-13
  • 2014-03-24
  • 1970-01-01
  • 1970-01-01
  • 2015-01-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多