簡體   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