C ++ makefile:只使用include目录中的一些头文件

时间:2014-03-25 07:32:27

标签: c++ makefile

我有一个包含多个文件夹的项目:

folderA: header1.h header2.h
folderB: header1.h(modified) file1.cpp (includes header1.h and header2.h)

我想编写一个Makefile,它使用header1.h中的folderBheader2.h中的folderA

但是如果我这样写我的Makefile:

LOCAL_C_INCLUDES += \
folderA\

然后我在编译some values are defined twice时遇到错误,即使标题文件以#pragma once开头。

知道如何实现这个目标吗?

我还尝试在makefile中明确列出头文件,但它似乎不起作用。

1 个答案:

答案 0 :(得分:0)

关于包含文件我倾向于只使用-Ipath / to /文件夹到包含includes的每个文件夹。所以在这种情况下,'-dpath / to / folderA -Ipath / folderB然后你可以在你的代码中写#include“header1.h”#include“header2.h”。

包含警卫(#ifndef和#pragma)不能在编译单元之间工作,这就是为什么你永远不应该(严肃地说,它只会让你长期痛苦)在头文件中定义任何东西,只声明他们。

这将摆脱多重定义问题。为什么呢?

编译单元是一个.cpp文件和所有包含的标头。每个.cpp创建一个包含代码的中间阶段二进制表示的目标文件,这是编译阶段。然后在链接阶段将这些目标文件链接在一起。因为如果你有“float foo”,每个.cpp都是用c ++单独处理的。在header.hpp中,a.cp​​p和b.cpp都包含header.hpp,编译器在运行应用程序时如何知道你的意思?