當前位置:首頁 » 編程軟體 » makefile編程

makefile編程

發布時間: 2022-11-18 10:55:50

⑴ 如何調試makefile

調試makefile的步驟如下,
一、make的退出碼
make命令執行後有三個退出碼:
0 —— 表示成功執行。

1 —— 如果make運行時出現任何錯誤,其返回1。

2 —— 如果你使用了make的「-q」選項,並且make使得一些目標不需要更新,那麼返回2。
Make的相關參數我們會在後續章節中講述。
二、指定Makefile

前面我們說過,GNU make找尋默認的Makefile的規則是在當前目錄下依次找三個文件——「GNUmakefile」、「makefile」和「Makefile」。其按順序找這三個文件,一旦找到,就開始讀取這個文件並執行。

當前,我們也可以給make命令指定一個特殊名字的Makefile。要達到這個功能,我們要使用make的「-f」或是「--file」參數(「--makefile」參數也行)。例如,我們有個makefile的名字是「hchen.mk」,那麼,我們可以這樣來讓make來執行這個文件:

make –f hchen.mk
如果在make的命令行是,你不只一次地使用了「-f」參數,那麼,所有指定的makefile將會被連在一起傳遞給make執行。

三、指定目標

一般來說,make的最終目標是makefile中的第一個目標,而其它目標一般是由這個目標連帶出來的。這是make的默認行為。當然,一般來說,你的makefile中的第一個目標是由許多個目標組成,你可以指示make,讓其完成你所指定的目標。要達到這一目的很簡單,需在make命令後直接跟目標的名字就可以完成(如前面提到的「make clean」形式)

任何在makefile中的目標都可以被指定成終極目標,但是除了以「-」打頭,或是包含了「=」的目標,因為有這些字元的目標,會被解析成命令行參數或是變數。甚至沒有被我們明確寫出來的目標也可以成為make的終極目標,也就是說,只要make可以找到其隱含規則推導規則,那麼這個隱含目標同樣可以被指定成終極目標。

四、檢查規則

讓的makefile中的規則執行起來,檢查一下我們的命令,或是執行的序列。於是可以使用make命令的下述參數:
「-n」

「--just-print」

「--dry-run」
「--recon」
不執行參數,這些參數只是列印命令,不管目標是否更新,把規則和連帶規則下的命令列印出來,但不執行,這些參數對於我們調試makefile很有用處。
「-t」
「--touch」

這個參數的意思就是把目標文件的時間更新,但不更改目標文件。也就是說,make假裝編譯目標,但不是真正的編譯目標,只是把目標變成已編譯過的狀態。
五、make的參數
下面列舉了所有GNU make 3.80版的參數定義。其它版本和產商的make大同小異,不過其它產商的make的具體參數還是請參考各自的產品文檔。
「-b」

「-m」

這兩個參數的作用是忽略和其它版本make的兼容性。
「-B」
「--always-make」

認為所有的目標都需要更新(重編譯)。

⑵ 用makefile編輯的文件怎麼編譯

我們在linux下進行編程的時候,會發現我們沒有工程文件,然後,我們在不同目錄下
的文件如此雜亂無章,讓我們感到頭疼,怎麼可以把它們進行同步在一起,然後,一起進行編譯呢,
這里,就是我們需要用到的工具了,makefile文件的作用了,makefile可以有效地組織文件和目錄,
把處於不同目錄下的文件進行同時編譯,而不會因為目錄的不同,而有所差別。
這里,我來分享一下makefile的簡單的用法。
1:基本的格式:
magproc:magproc.o dbproc.o
$(EC) -o $(BINPATH)/$@ $? $(LIB)
可執行文件名:鏈接文件
編譯工具 (參數) (鏈接庫) 文件名
2:工程文件Make.defines

3:makefile文件

http://jingyan..com/article/48206aeaf9e82e216ad6b335.html

⑶ 如何調試makefile

makefile 的調試有點像魔法。可惜,並不存在makefile 調試器之類的東西可用來查看特定規則是如何被求值的,或某個變數是如何被擴展的。相反,大部分的調試過程只是在執
行輸出的動作以及查看makefile。事實上,GNU make 提供了若干可以協助調試的內置函數以及命令行選項。
用來調試makefile 的一個最好方法就是加入調試掛鉤以及使用具保護的編程技術,讓你能夠在事情出錯時恢復原狀。我將會介紹若干基本的調試技術以及我所發現的最有用的具保
護能力的編碼習慣。
1.make 的調試功能
warning函數非常適合用來調試難以捉摸的makefile。因為warning函數會被擴展成空字元串,所以它可以放在makefile 中的任何地方:開始的位置、工作目標或必要條件列表中以
及命令腳本中。這讓你能夠在最方便查看變數的地方輸出變數的值。例如:
$(warning A top-level warning)
FOO := $(warning Right-hand side of a simple variable)bar
BAZ = $(warning Right-hand side of a recursive variable)boo
$(warning A target)target: $(warning In a prerequisite list)makefile
$(BAZ)
$(warning In a command script)
ls
$(BAZ):
這會產生如下的輸出:
$ make
makefile:1: A top-level warning
makefile:2: Right-hand side of a simple variable
makefile:5: A target
makefile:5: In a prerequisite list
makefile:5: Right-hand side of a recursive variable
makefile:8: Right-hand side of a recursive variable
makefile:6: In a command script
ls
makefile
請注意,warning函數的求值方式是按照make標準的立即和延後求值演算法。雖然對BAZ的賦值動作中包含了一個warning函數,但是直到BAZ在必要條件列表中被求值後,這個信息才
會被輸出來。
「可以在任何地方安插warning調用」的這個特性,讓它能夠成為一個基本的調試工具。
2.命令行選項
我找到了三個最適合用來調試的命令行選項:
--just-print(-n)
--print-database(-p)
--warn-undefined-variables。
2.1 --just-print
在一個新的makefile 工作目標上,我所做的第一個測試就是以--just-print(-n)選項來調用make。這會使得make讀進makefile並且輸出它更新工作目標時將會執行的命令,但是
不會真的執行它們。GNU make 有一個方便的功能,就是允許你為將被輸出的命令標上安靜模式修飾符(@)。
這個選項被假設可以抑制所有命令的執行動作,然而這只在特定的狀況下為真。實際上,你必須小心以對。盡管make不會運行命令腳本,但是在立即的語境之中,它會對shell函數
調用進行求值動作。例如:
REQUIRED_DIRS = ...
_MKDIRS := $(shell for d in $(REQUIRED_DIRS); \
do \
[[ -d $$d ]] || mkdir -p $$d; \
done)
$(objects) : $(sources)
正如我們之前所見,_MKDIRS 簡單變數的目的是觸發必要目錄的創建動作。如果這個makefile 是以--just-print 選項的方式運行的,那麼當make 讀進makefile 時,shell命令將
會一如往常般被執行。然後,make 將會輸出(但不會執行)更新$(objects)文件列表所需要進行的每個編譯命令。
2.2 --print-data-base
--print-data-base(-p)是另一個你常會用到的選項。它會運行makefile,顯示GNU版權信息以及make 所運行的命令,然後輸出它的內部資料庫。資料庫里的數據將會依種類劃分
成以下幾個組:variables、directories、implicit rules、pattern-specific variables、files(explicit rules)以及vpath earch path。如下所示:
# GNU Make 3.80
# Copyright (C) 2002 Free Software Foundation, Inc.
# This is free software; see the source for ing conditions.
# There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
正常的命令將會在此處執行
# Make data base, printed on Thu Apr 29 20:58:13 2004
# Variables
...
# Directories
...
# Implicit Rules
...
# Pattern-specific variable values
...
# Files
...
# VPATH Search Paths
讓我們更詳細地查看以上這幾個區段。
變數區段(variable)將會列出每個變數以及具描述性的注釋:
# automatic
<D = $(patsubst %/,%,$(dir $<))
# environment
EMACS_DIR = C:/usr/emacs-21.3.50.7
# default
CWEAVE = cweave
# makefile (from `../mp3_player/makefile', line 35)
CPPFLAGS = $(addprefix -I ,$(include_dirs))
# makefile (from `../ch07-separate-binaries/makefile', line 44)
RM := rm -f
# makefile (from `../mp3_player/makefile', line 14)
define make-library
libraries += $1
sources += $2
$1: $(call source-to-object,$2)
$(AR) $(ARFLAGS) $$@ $$^
endef
自動變數不會被顯示出來,但是通過它們可以方便變數的獲得,像$(<D)。注釋所指出的是origin 函數所返回的變數類型(參見「較不重要的雜項函數」一節)。如果變數被定義
在一個文件中,則會在注釋中指出其文件名以及該定義所在的行號。簡單變數和遞歸變數的差別在於賦值運算符。簡單變數的值將會被顯示成右邊部分被求值的形式。
下一個區段標示為Directories,它對make 開發人員比對make 用戶有用。它列出了將會被make 檢查的目錄,包括可能會存在的SCCS 和RCS 子目錄,但它們通常不存在。對每個目
錄來說,make 會顯示實現細節,比如設備編號、inode 以及文件名模式匹配的統計數據。
接著是Implicit Rules 區段。這個區段包含了make 資料庫中所有的內置的和用戶自定義的模式規則。此外,對於那些定義在文件中的規則,它們的注釋將會指出文件名以及行號

%.c %.h: %.y
# commands to execute (from `../mp3_player/makefile', line 73):
$(YACC.y) --defines $<
$(MV) y.tab.c $*.c
$(MV) y.tab.h $*.h
%: %.c
# commands to execute (built-in):
$(LINK.c) $^ $(LOADLIBES) $(LDLIBS) -o $@
%.o: %.c
# commands to execute (built-in):
$(COMPILE.c) $(OUTPUT_OPTION) $<
查看這個區段,是讓你能夠熟悉make 內置規則的變化和結構的最佳方法。當然,並非所有的內置規則都會被實現成模式規則。如果你沒有找到你想要的規則,可以查看Files區段
,舊式後綴規則就列在該處。
下一個區段被標示為Pattern-specific variables,此處所列出的是定義在makefile 里的模式專屬變數。所謂模式專屬變數,就是變數定義的有效范圍被限定在相關的模式規則執
行的時候。例如,模式變數YYLEXFLAG 被定義成:
%.c %.h: YYLEXFLAG := -d
%.c %.h: %.y
$(YACC.y) --defines $<
$(MV) y.tab.c $*.c
$(MV) y.tab.h $*.h
將會被顯示成:
# Pattern-specific variable values
%.c :
# makefile (from `Makefile', line 1)
# YYLEXFLAG := -d
# variable set hash-table stats:
# Load=1/16=6%, Rehash=0, Collisions=0/1=0%
%.h :
# makefile (from `Makefile', line 1)
# YYLEXFLAG := -d
# variable set hash-table stats:
# Load=1/16=6%, Rehash=0, Collisions=0/1=0%
# 2 pattern-specific variable values
接著是Files 區段,此處所列出的都是與特定文件有關的自定義和後綴規則:
# Not a target:
.p.o:
# Implicit rule search has not been done.
# Modification time never checked.
# File has not been updated.
# commands to execute (built-in):
$(COMPILE.p) $(OUTPUT_OPTION) $<
lib/ui/libui.a: lib/ui/ui.o
# Implicit rule search has not been done.
# Last modified 2004-04-01 22:04:09.515625
# File has been updated.
# Successfully updated.
# commands to execute (from `../mp3_player/lib/ui/mole.mk', line 3):
ar rv $@ $^
lib/codec/codec.o: ../mp3_player/lib/codec/codec.c ../mp3_player/lib/codec/codec.c ../mp3_player/include/codec/codec.h
# Implicit rule search has been done.
# Implicit/static pattern stem: `lib/codec/codec'
# Last modified 2004-04-01 22:04:08.40625
# File has been updated.
# Successfully updated.
# commands to execute (built-in):
$(COMPILE.c) $(OUTPUT_OPTION) $<
中間文件與後綴規則會被標示為Not a target,其餘是工作目標。每個文件將會包含注釋,用以指出make 是如何處理此規則的。被找到的文件在被顯示的時候將會通過標準的
vpath 搜索來找出其路徑。
最後一個區段被標示為VPATH Search Paths,列出了VPATH 的值以及所有的vpath模式。
對於大規模使用eval 以及用戶自定義函數來建立復雜的變數和規則的makefile 來說,查看它們的輸出結果通常是確認宏是否已被擴展成預期值的唯一方法。
2.3 --warn-undefined-variables
這個選項會使得make 在未定義的變數被擴展時顯示警告信息。因為未定義的變數會被擴展成空字元串,這常見於變數名稱打錯而且很長一段時間未被發現到。這個選項有個問題,
這也是為什麼我很少使用這個選項的原因,那就是許多內置規則都會包含未定義的變數以作為用戶自定義值的掛鉤。所以使用這個選項來運行make必然會產生許多不是錯誤的警告
信息,而且對用戶的makefile 沒有什麼用處。例如:
$ make --warn-undefined-variables -n
makefile:35: warning: undefined variable MAKECMDGOALS
makefile:45: warning: undefined variable CFLAGS
makefile:45: warning: undefined variable TARGET_ARCH
...
makefile:35: warning: undefined variable MAKECMDGOALS
make: warning: undefined variable CFLAGS
make: warning: undefined variable TARGET_ARCH
make: warning: undefined variable CFLAGS
make: warning: undefined variable TARGET_ARCH
...
make: warning: undefined variable LDFLAGS
make: warning: undefined variable TARGET_ARCH
make: warning: undefined variable LOADLIBES
make: warning: undefined variable LDLIBS
不過,此命令在需要捕獲此類錯誤的某些場合上可能非常有用。
3.--debug 選項
當你需要知道make 如何分析你的依存圖時,可以使用--debug 選項。除了運行調試器,這個選項是讓你獲得最詳細信息的另一個方法。你有五個調試選項以及一個修飾符可用,分
別是:basic、verbose、implicit、jobs、all 以及makefile。
如果調試選項被指定成--debug,就是在進行basic 調試;如果調試選項被指定成-d,就是在進行all調試;如果要使用選項的其他組合,則可以使用--debug=option1,option2 這
個以逗號為分隔符的列表,此處的選項可以是下面任何一個單詞(實際上,make 只會查看第一個字母):

⑷ 如何編寫makefile

你先用gcc把它給編譯出來。然後再想用makefile

gcc最一般的用法就是:
gcc -o 要生成的可執行文件名 源代碼文件名
如:gcc -o hello.x hello.c
如果一些頭文件要指明的話,可以這樣:
gcc -o hello.x -I頭文件所在的文件夾 -l一些庫名 hello.c
最通常,我們用到一些數學庫。gcc -o hello.x -lm hello.c

makefile的話,你可以基於上述的語句進行修改:建議你看點資料,或一些典型的例子。但是注意的是規則那一行,得用Tab鍵打頭。
hello.x : hello.o
gcc -o hello.x hello.o (這一行,得用Tab打頭)
hello.o : hello.c 頭文件
gcc -c hello.o hello.c -I頭文件所在目錄 -lm (這一行,得用Tab打頭)

⑸ unix高級環境編程 makefile 怎麼使用

創建一個makefile文件。
然後根據makefile的規則編寫編譯規則。
使用命令make all,編譯所有。

⑹ Linux平台Makefile文件的編寫基礎篇

目的:
基本掌握了 make 的用法,能在Linux系統上編程。
環境:
Linux系統,或者有一台Linux伺服器,通過終端連接。一句話:有Linux編譯環境。
准備:
准備三個文件:file1.c, file2.c, file2.h
file1.c:
#include
#include "file2.h"
int main()
{
printf("print file1$$$$$$$$$$$$ ");
File2Print();
return 0;
}

file2.h:

#ifndef FILE2_H_
#define FILE2_H_

#ifdef __cplusplus

extern "C" {

#endif

void File2Print();

#ifdef __cplusplus

}

#endif

#endif


file2.c:
#include "file2.h"
void File2Print()
{
printf("Print file2********************** ");
}

基礎:
先來個例子:
有這么個Makefile文件。(文件和Makefile在同一目錄)
=== makefile 開始 ===
helloworld:file1.o file2.o
gcc file1.o file2.o -o helloworld

file1.o:file1.c file2.h
gcc -c file1.c -o file1.o

file2.o:file2.c file2.h

gcc -c file2.c -o file2.o


clean:

rm -rf *.o helloworld

=== makefile 結束 ===

一個 makefile 主要含有一系列的規則,如下:
A: B
(tab)
(tab)

每個命令行前都必須有tab符號。


上面的makefile文件目的就是要編譯一個helloworld的可執行文件。讓我們一句一句來解釋:

helloworld : file1.o file2.o: helloworld依賴file1.o file2.o兩個目標文件。

gcc File1.o File2.o -o helloworld: 編譯出helloworld可執行文件。-o表示你指定 的目標文件名。


file1.o : file1.c: file1.o依賴file1.c文件。

gcc -c file1.c -o file1.o: 編譯出file1.o文件。-c表示gcc 只把給它的文件編譯成目標文件, 用源碼文件的文件名命名但把其後綴由「.c」或「.cc」變成「.o」。在這句中,可以省略-o file1.o,編譯器默認生成file1.o文件,這就是-c的作用。


file2.o : file2.c file2.h
gcc -c file2.c -o file2.o

這兩句和上兩句相同。


clean:

rm -rf *.o helloworld

當用戶鍵入make clean命令時,會刪除*.o 和helloworld文件。


如果要編譯cpp文件,只要把gcc改成g++就行了。

寫好Makefile文件,在命令行中直接鍵入make命令,就會執行Makefile中的內容了。


到這步我想你能編一個Helloworld程序了。


上一層樓:使用變數

上面提到一句,如果要編譯cpp文件,只要把gcc改成g++就行了。但如果Makefile中有很多gcc,那不就很麻煩了。

第二個例子:

=== makefile 開始 ===
OBJS = file1.o file2.o
CC = gcc
CFLAGS = -Wall -O -g

helloworld : $(OBJS)
$(CC) $(OBJS) -o helloworld

file1.o : file1.c file2.h
$(CC) $(CFLAGS) -c file1.c -o file1.o

file2.o : file2.c file2.h
$(CC) $(CFLAGS) -c file2.c -o file2.o


clean:

rm -rf *.o helloworld
=== makefile 結束 ===


這里我們應用到了變數。要設定一個變數,你只要在一行的開始寫下這個變數的名字,後 面跟一個 = 號,後面跟你要設定的這個變數的值。以後你要引用 這個變數,寫一個 $ 符號,後面是圍在括弧里的變數名。


CFLAGS = -Wall -O –g,解釋一下。這是配置編譯器設置,並把它賦值給CFFLAGS變數。

-Wall: 輸出所有的警告信息。

-O: 在編譯時進行優化。

-g: 表示編譯debug版本。


這樣寫的Makefile文件比較簡單,但很容易就會發現缺點,那就是要列出所有的c文件。如果你添加一個c文件,那就需要修改Makefile文件,這在項目開發中還是比較麻煩的。



再上一層樓:使用函數

學到這里,你也許會說,這就好像編程序嗎?有變數,也有函數。其實這就是編程序,只不過用的語言不同而已。

第三個例子:

=== makefile 開始 ===
CC = gcc

XX = g++
CFLAGS = -Wall -O –g

TARGET = ./helloworld

%.o: %.c

$(CC) $(CFLAGS) -c lt; -o [email protected]

%.o:%.cpp

$(XX) $(CFLAGS) -c lt; -o [email protected]


SOURCES = $(wildcard *.c *.cpp)
OBJS = $(patsubst %.c,%.o,$(patsubst %.cpp,%.o,$(SOURCES)))


$(TARGET) : $(OBJS)
$(XX) $(OBJS) -o $(TARGET)

chmod a+x $(TARGET)

clean:

rm -rf *.o helloworld
=== makefile 結束 ===

函數1:wildcard

產生一個所有以 '.c' 結尾的文件的列表。

SOURCES = $(wildcard *.c *.cpp)表示產生一個所有以 .c,.cpp結尾的文件的列表,然後存入變數 SOURCES 里。


函數2:patsubst

匹配替換,有三個參數。第一個是一個需要匹配的式樣,第二個表示用什麼來替換它,第三個是一個需要被處理的由空格分隔的列表。

OBJS = $(patsubst %.c,%.o,$(patsubst %.cc,%.o,$(SOURCES)))表示把文件列表中所有的.c,.cpp字元變成.o,形成一個新的文件列表,然後存入OBJS變數中。


%.o: %.c

$(CC) $(CFLAGS) -c lt; -o [email protected]

%.o:%.cpp

$(XX) $(CFLAGS) -c lt; -o [email protected]

這幾句命令表示把所有的.c,.cpp編譯成.o文件。

這里有三個比較有用的內部變數。 [email protected] 擴展成當前規則的目的文件名, lt; 擴展成依靠 列表中的第一個依靠文件,而 $^ 擴展成整個依靠的列表(除掉了裡面所有重 復的文件名)。


chmod a+x $(TARGET)表示把helloworld強制變成可執行文件。

⑺ Makefile 到底是什麼

首先要知道什麼是編譯,然後要知道命令行編譯,然後什麼是依賴,
make就是為了解決命令行編譯時的依賴的自動化編譯工具,makefile是make的參數,告訴make具體的依賴關系
舉個例子,編程相當於做飯,你可以像美食家一樣做得很有藝術,也可以像工廠流水線一樣自動化,命令行編譯就是流水線,先後順序就是依賴關系,makefile就是菜譜,菜譜里說清楚了一個菜由哪些步驟組成

⑻ 什麼是makefile

這里簡單說一下,更多細節可以去找一些深入的材料去了解。make一般主要被用來管理一個軟體程序項目(用來完成大型軟體的自動編譯),但是它不僅僅可以用來管理軟體程序,還可以做很多其他的事情,比如文件同步等。makefile是被make使用的「描述」文件,它描述要被make所管理的項目中的文件間的關系(比如對於一個C程序項目來說,.h文件和.c文件之間的關系,.c和.o之間的關系等),和如何維護這個項目的狀態(比如對於一個程序項目來說,就有編譯可執行文件,產生文檔,清除所有除源代碼文件之外的文件等).腳本是和make/makefile沒有任何關系的,就是一種編程語言,一般都是解釋型的編程語言,好處是容易開發,寫完就能用,不需要編譯,多用於系統維護等。

⑼ make makefile cmake qmake都是什麼,有什麼區別

1. make 是用來執行Makefile的。
2. Makefile是類unix環境下(比如Linux)的類似於批處理的"腳本"文件。其基本語法是: 目標+依賴+命令,只有在目標文件不存在,或目標比依賴的文件更舊,命令才會被執行。由此可見,Makefile和make可適用於任意工作,不限於編程。比如,可以用來管理latex。
3. Makefile+make可理解為類unix環境下的項目管理工具,但它太基礎了,抽象程度不高,而且在windows下不太友好(針對visual studio用戶),於是就有了跨平台項目管理工具cmake
4. cmake是跨平台項目管理工具,它用更抽象的語法來組織項目。雖然,仍然是目標,依賴之類的,但更為抽象和友好,比如可用math表示數學庫,而不需要再具體指定到底是math.dll還是libmath.so,在windows下它會支持生成visual studio的工程,在linux下它會生成Makefile,甚至它還能生成eclipse工程文件。也就是說,從同一個抽象規則出發,它為各個編譯器定製工程文件。
5. cmake是抽象層次更高的項目管理工具,cmake命令執行的CMakeLists.txt文件
6. qmake是Qt專用的項目管理工具,對應的工程文件是*.pro,在Linux下面它也會生成Makefile,當然,在命令行下才會需要手動執行qmake,完全可以在qtcreator這個專用的IDE下面打開*.pro文件,使用qmake命令的繁瑣細節不用管了。

總結一下,make用來執行Makefile,cmake用來執行CMakeLists.txt,qmake用來處理*.pro工程文件。Makefile的抽象層次最低,cmake和qmake在Linux等環境下最後還是會生成一個Makefile。cmake和qmake支持跨平台,cmake的做法是生成指定編譯器的工程文件,而qmake完全自成體系。

⑽ 寫個makefile就這么難,該怎麼解決

UNIX/Linux 系統下面的 make 工具,主要用來解決多個 C 語言源程序之間的編譯與連接問題。它的最大好處就是:當 C 語言源程序很多時,如果只有其中一個源程序作了修改,而其它的所有源程序未作任何修改,那麼只要對這一個源程序進行編譯,然後再與其它程序的目標文件(*.o)進行連接即可,非常節約時間。其實不是寫 makefile 文件難,而是必須要按照一定的規范來書寫 makefile 文件。而在編輯 makefile 的過程中,被編譯、連接的文件的先後次序是最、最重要的。如果先後次序寫反了,那麼肯定是不能夠達到預期的目的的。至於說如何把 makefile 文件寫得非常自如,那就需要有豐富的多模塊編程經驗了。

熱點內容
appleid為什麼連接伺服器出現問題 發布:2025-05-13 18:17:37 瀏覽:971
書翁怎麼配置 發布:2025-05-13 18:17:36 瀏覽:911
雲資料庫mongodb 發布:2025-05-13 18:16:12 瀏覽:774
A7編程 發布:2025-05-13 18:15:26 瀏覽:742
python視圖 發布:2025-05-13 18:14:01 瀏覽:759
win為什麼干不過安卓 發布:2025-05-13 18:12:27 瀏覽:586
文件夾只讀win8 發布:2025-05-13 18:11:41 瀏覽:272
xp安裝php 發布:2025-05-13 18:04:30 瀏覽:183
sqlserver介紹 發布:2025-05-13 17:58:00 瀏覽:4
雲閃付安卓版哪個版本好用 發布:2025-05-13 17:57:16 瀏覽:187