[英]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.h
的folderB
和folderA
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.