繁体   English   中英

C ++ Makefile:仅在包含目录中使用一些头文件

[英]C++ makefile: use only some header files in include directory

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

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

我想编写一个Makefile,它使用header1.hfolderBfolderA header2.h

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

LOCAL_C_INCLUDES += \
folderA\

然后,即使标头文件以#pragma once开头#pragma once ,我在编译时some values are defined twice出错,说some values are defined twice

知道如何实现吗?

我也尝试过在makefile中显式列出头文件,但它似乎不起作用。

关于包含文件,我倾向于仅使用-Ipath / to / folder到包含include的每个文件夹中。 因此在这种情况下,它应该是-Ipath / to / folderA -Ipath / folderB,然后可以在代码中编写#include“ header1.h” #include“ header2.h”。

包括后卫(#ifndef和#pragma)在整个编译单元中均不起作用,这就是为什么您永远不应该(严重的是,它将长期困扰您)永远不要在头文件中定义任何内容,只声明他们。

这将消除多定义问题。 为什么?

编译单元是一个.cpp文件,包括所有标头。 每个.cpp创建一个目标文件,其中包含代码的中间阶段二进制表示,这是编译阶段。 然后在链接阶段将这些目标文件链接在一起。 由于每个.cpp在c ++中都是分开处理的,如果您有“ float foo;”, 在header.hpp中,而a.cpp和b.cpp都包含header.hpp,在运行应用程序时,编译器将如何知道您指的是哪个foo?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM