2014-02-28 16 views
0

所以,我已經得到了那個需要編譯的對象文件列表,其中有一個巨大的列表。如何從文件讀取目標依賴關係?

我已經遇到了Win32上的問題,因爲輸入字符串太大。我想通過傳遞@filename到鏈接器,我可以讀取要從文件鏈接的目標文件,而不是將文件一對一地傳遞給鏈接器。

在我的makefile中:有沒有一種方法可以從文件中讀取依賴關係?類似的東西:

main.lib: @dependency_file_name

其中dependency_file_name有創造的lib需要需要.obj文件列表。

請記住,將文件的內容放入變量中也不起作用,因爲我在使用依賴項列表作爲變量時也遇到了輸入字符串太長的問題。

另外:方法應攜帶(Linux操作系統,Win32的)


編輯:目前,我的makefile文件的結構如下:

# slurp in some global settings 
include /path/to/global/settings 

all: prepare_target mylib cleanup_target 

prepare_target: 
    # do preparing work (setup temp files etc) 

cleanup_target: 
    # do cleanup work (delete temp files etc) 

mylib: \ 
    file1.obj \ 
    file2.obj \ 
    ... \ 
    file215.obj 

# this file holds the dependencies for each .obj file 
include file_with_obj_file_dependencies 

實際上有215 C文件被編譯到這個庫中。正如我所說:將這個列表提供給鏈接器時,我需要通過文件來完成,因爲字符串對於命令行來說太大了。

我可以隨意更改makefile所需的任何東西:它是從VisualStudio vcxproj生成的,我擁有生成模板。

file_with_obj_dependencies看起來就象這樣:

file1.obj: \ 
    file1.c \ 
    file1.h \ 

file2.obj: \ 
    file2.c \ 
    file2.h \ 

... \ 

file215.obj \ 
    file215.c \ 
    file215.h \ 
+0

在makefile文件,這是否列表中存在的變量? – Beta

+0

@beta:是的,我可以這樣做 – eckes

+0

你能告訴我們你怎麼做?你必須有一些確定列表的東西。 – Beta

回答

0

在Windows上我傾向於使用cygwin的。這是我發現unix最接近的環境。這使得你的Makefiles可移植。我沒有遇到任何限制的命令行長度限制。這裏是擁有超過¾一百萬的命令行參數的例子:

a := 1 2 3 4 5 6 7 8 9 a b c d e f 

.PHONY: test 
test: 
    @echo $(foreach A,$a,$(foreach B,$a,$(foreach C,$a,$(foreach D,$a,$(foreach E,$a,$A$B$C$D$E))))) | wc -wc 

(該wc是爲了讓您不必等待5,000,000左右字符的滾動。)

因此,對於有限的win32工具,使用bash編寫中間文件命令行參數,然後將其傳遞給link.exe(比如說),前面加上@

喜歡的東西:

mylib.lib: 
    echo $^ >[email protected] 
    link -o [email protected] @[email protected] 

(你確定你所需要的中間文件215的源文件似乎並不過於繁瑣?)