我是新來的ifle 我想測試我的主要特定功能。這個功能在c文件裏有很多依賴關係,我甚至無法跟蹤是否可以使用.d文件來編譯所有依賴的c文件?
是否有可能使用該.c文件的.c文件來編譯我的主程序以獲得此函數在我的小應用程序中工作以及.d文件獲取所有依賴關係?
我就在想,如果有可能做這樣的事情
mymain.o : requiredfunctions.d mymain.c
我是新來的ifle 我想測試我的主要特定功能。這個功能在c文件裏有很多依賴關係,我甚至無法跟蹤是否可以使用.d文件來編譯所有依賴的c文件?
是否有可能使用該.c文件的.c文件來編譯我的主程序以獲得此函數在我的小應用程序中工作以及.d文件獲取所有依賴關係?
我就在想,如果有可能做這樣的事情
mymain.o : requiredfunctions.d mymain.c
你似乎誤會源文件,頭文件,目標文件和可執行文件之間的關係。
假設我們有幾個功能:
void alpha();
void beta();
void gamma();
void delta();
...
每個在頭文件(alpha.h
)被聲明,並在源文件(alpha.c
)所定義。現在假設這些功能是獨立的;他們不會互相打電話。編譯其中之一(以產生一個目標文件)很簡單:
gcc -c beta.c -o beta.o
(以下簡稱「-cc -oo」只是一個巧合的-c
的意思是「建立一個目標文件」,以及-o
手段。 「以下是如何命名結果」)。
我們還有一個函數void octopus()
,它調用所有這些函數。我們宣佈它的頭,octopus.h
:
// octopus.h
void octopus();
,並在源文件中定義它,octopus.c
:
#include "alpha.h"
#include "beta.h"
...
#include "omega.h"
void octopus()
{
... // calls alpha(), beta(), etc.
}
生產目標文件很簡單:
gcc -c octopus.c -o octopus.o
現在假設我們有一個文件,mymain.c
,其中包含main()
並調用一些函數:
#include "alpha.h"
#include "beta.h"
int main()
{
alpha();
beta();
return 0;
}
構建目標文件mymain.o
很簡單:
gcc -c mymain.c -o mymain.o
構建可執行mymain
是稍難:
gcc mymain.o alpha.o beta.o -o mymain
如果這一切是明確的,那我可以嘗試猜你想要什麼。你想main()
打電話給octopus()
,並且你想讓Make爲你建立可執行文件即使你不知道列表alpha, beta,... omega
,是嗎?
編輯:如果你有文件octopus.d
:
octopus.o: octopus.c alpha.h beta.h ... omega.h
,你可以把它變成所需的對象文件的列表:
alpha.o beta.o ... omega.o
通過多種方法的。
sed 's/.*\.c //;s/h /o /g' octopus.d
,或者你可以使用make的文本處理函數生成文件中:你可以使用命令行的sed
OBJECTS := $(subst .h,.o,$(filter %.h, $(shell cat octopus.d)))
當你說「依賴性」,你的意思是頭文件(例如' mymain.c'有一行'#include'kitchensink.h'')? – Beta
實際上,「requiredfunctions.c」文件編譯所需的所有c文件 – becks
我知道d文件只包含頭文件,但如果我可以使用它來完成這項工作,儘可能地做到這一點 – becks