我在一個目錄中有一個未知數目的目標文件,所有這些文件名爲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
我試着用維權和環境變量,但沒有奏效。 在此先感謝
我在一個目錄中有一個未知數目的目標文件,所有這些文件名爲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
我試着用維權和環境變量,但沒有奏效。 在此先感謝
當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
我明白了一切。謝謝你的指導SomethingDark,這是高度讚賞。 – user3629077
@ user3629077 - 很高興爲你效勞。 – SomethingDark
除了compile_to_c文件以外的目錄中是否還有其他'.o'文件? – SomethingDark
@SomethingDark沒有 – user3629077