2016-05-03 69 views
-1

我在一個目錄中有一個未知數目的目標文件,所有這些文件名爲compile_to_cX.o,其中X是從1到此目錄中目標文件數目的值。我想用gcc將它們連接,而最終的結果等同於類似:使用gcc批量鏈接未知數目的目標文件

gcc -Xlinker -no-as-needed compile_to_c1.o ... compile_to_c1N.o -x none 
    strip a.out 

我試着用維權和環境變量,但沒有奏效。 在此先感謝

+0

除了compile_to_c文件以外的目錄中是否還有其他'.o'文件? – SomethingDark

+0

@SomethingDark沒有 – user3629077

回答

0

dir運行沒有/b選項時,它找到的文件數將顯示在底部。由於您可以在文件擴展名上過濾dir,並且除了您想要的文件之外不會有其他.o文件,因此您可以簡單地在dir輸出的底部獲取文件計數字符串的第一個由空格分隔的標記。

從那裏,你可以使用一個for /L循環來建立一個字符串,其中包含你需要編譯的所有文件。

@echo off 
setlocal enabledelayedexpansion 

:: Get the number of .o files from the dir listing 
for /f "tokens=1" %%A in ('dir *.o^|find "File(s)"') do set o_files=%%A 

:: Build a string with all of the .o files (up to 512 due to string length limitations) 
for /L %%A in (1,1,!o_files!) do set "o_string=!o_string! compile_to_c%%A.o" 

:: Run gcc and strip (remove the echos if your strings look correct) 
echo gcc -Xlinker -no-as-needed !o_string! -x none 
echo strip a.out 
pause 
+0

我明白了一切。謝謝你的指導SomethingDark,這是高度讚賞。 – user3629077

+0

@ user3629077 - 很高興爲你效勞。 – SomethingDark