一般是可以的, include是預處理命令,它有預處理器來完成,在linux的開發環境中,它對應于cpp 有這個應用程序的。
創新互聯建站服務項目包括浦口網站建設、浦口網站制作、浦口網頁制作以及浦口網絡營銷策劃等。多年來,我們專注于互聯網行業,利用自身積累的技術優勢、行業經驗、深度合作伙伴關系等,向廣大中小型企業、政府機構等提供互聯網行業的解決方案,浦口網站推廣取得了明顯的社會效益與經濟效益。目前,我們服務的客戶以成都為中心已經輻射到浦口省份的部分城市,未來相信會繼續擴大服務區域并繼續獲得客戶的支持與信任!
如果進行嵌套include那會出問題的。這時候都會有相應的提示的。
請慢慢看,真要詳細講起來,文字實在太多了,但是由于時間原因,我只能以粗略的文字講,語言有一些邏輯漏洞,請見諒。
首先我會以粗略的文字回答你的其中一個問題,然后后面會給出第二個問題的答案。
問:什么時候會執行這些規則及其相對應的命令?
答:當你給make命令指定了它要生成的終極目標時,它會從要生成的終極目標尋址依賴的依賴條件,然后依賴條件一級一級的查找并執行相對應的命令。即如果當有目標需要.s、.o這些依賴條件的時候,會取找要生成.s、.o目標的依賴條件,這個時候就會執行這些規則:
.S.s:
$(CPP) $(CFLAGS) $ -o $*.s
.S.o:
$(CC) $(CFLAGS) -c $ -o $*.o
.c.o:
$(CC) $(CFLAGS) -c $ -o $*.o
一、
源代碼文件必須經過:預處理(cpp)、編譯(ccl)、匯編(as)、鏈接(ld)。這四個階段最終才得到可執行的程序:
makefile里定義了變量CPP=cpp;其中$(CPP)的意思是去定義變量CPP里的值:cpp,用cpp來預處理源文件。
$(CFLAGS)的意思是取定義變量CDLAGS里面的值,一般是一些自我定義的預處理命令和編譯命令的參數。
$的意思是:在規則的命令中,表示第一個依賴條件
-o是一個預處理、編譯等執行命令需要的參數
/*
其實這條命令:$(CPP) $(CFLAGS) $ -o $*.s,就是一條預處理命令,將一個源文件預處理為.s文件后綴的文件,*為通配符。那源文件在哪里呢。其實這條命令.S.s: 已經說了以.S結尾的文件就是源文件。那這條命令.S.s這么說了呢?請看下面的后綴規則講解。
*/
二、
老式風格的"后綴規則"
后綴規則是一個比較老式的定義隱含規則的方法。后綴規則會被模式規則逐步地取代。因為模式規則更強更清晰。為了和老版本的Makefile兼容,GNU make同樣兼容于這些東西。后綴規則有兩種方式:"雙后綴"和"單后綴"。
雙后綴規則定義了一對后綴:目標文件的后綴和依賴目標(源文件)的后綴。如".c.o"相當于"%o : %c"。單后綴規則只定義一個后綴,也就是源文件的后綴。
后綴規則中所定義的后綴應該是make所認識的,如果一個后綴是make所認識的,那么這個規則就是單后綴規則,而如果兩個連在一起的后綴都被make所認識,那就是雙后綴規則。例如:".c"和".o"都是make所知道。
因而,如果你定義了一個規則是".c.o"那么其就是雙后綴規則,意義就是".c" 是源文件的后綴,".o"是目標文件的后綴。如下示例:
.c.o:
$(CC) -c $(CFLAGS) $(CPPFLAGS) -o $@ $
其中.c.o:這個命令表示源文件的后綴為.c,目標文件的后綴為.o;即也可理解為:生成.o的目標文件依賴條件是源文件.c
下面命令是將是所有的.c源文件都編譯成.o的目標文件。
注:后綴規則不允許任何的依賴文件,如果有依賴文件的話,那就不是后綴規則,那些后綴統統被認為是文件名,
如:
.c.o: foo.h
$(CC) -c $(CFLAGS) $(CPPFLAGS) -o $@ $
這個例子,就是說,文件".c.o"依賴于文件"foo.h",而不是我們想要的這樣:
%.o: %.c foo.h
$(CC) -c $(CFLAGS) $(CPPFLAGS) -o $@ $
因此后綴規則不允許任何的依賴文件。
用法:gcc [選項] 文件...
選項:
-pass-exit-codes 在某一階段退出時返回最高的錯誤碼
--help 顯示此幫助說明
--target-help 顯示目標機器特定的命令行選項
(使用‘-v --help’顯示子進程的命令行參數)
-dumpspecs 顯示所有內建 spec 字符串
-dumpversion 顯示編譯器的版本號
-dumpmachine 顯示編譯器的目標處理器
-print-search-dirs 顯示編譯器的搜索路徑
-print-libgcc-file-name 顯示編譯器伴隨庫的名稱
-print-file-name=庫 顯示 庫 的完整路徑
-print-prog-name=程序 顯示編譯器組件 程序 的完整路徑
-print-multi-directory 顯示不同版本 libgcc 的根目錄
-print-multi-lib 顯示命令行選項和多個版本庫搜索路徑間的映射
-print-multi-os-directory 顯示操作系統庫的相對路徑
-Wa,選項 將逗號分隔的 選項 傳遞給匯編器
-Wp,選項 將逗號分隔的 選項 傳遞給預處理器
-Wl,選項 將逗號分隔的 選項 傳遞給鏈接器
-Xassembler 參數 將 參數 傳遞給匯編器
-Xpreprocessor 參數 將 參數 傳遞給預處理器
-Xlinker 參數 將 參數 傳遞給鏈接器
-combine 將多個源文件一次性傳遞給匯編器
-save-temps 不刪除中間文件
-pipe 使用管道代替臨時文件
-time 為每個子進程計時
-specs=文件 用 文件 的內容覆蓋內建的 specs 文件
-std=標準 指定輸入源文件遵循的標準
--sysroot=目錄 將 目錄 作為頭文件和庫文件的根目錄
-B 目錄 將 目錄 添加到編譯器的搜索路徑中
-b 機器 為 gcc 指定目標機器(如果有安裝)
-V 版本 運行指定版本的 gcc(如果有安裝)
-v 顯示編譯器調用的程序
-### 與 -v 類似,但選項被引號括住,并且不執行命令
-E 僅作預處理,不進行編譯、匯編和鏈接
-S 編譯到匯編語言,不進行匯編和鏈接
-c 編譯、匯編到目標代碼,不進行鏈接
-o 文件 輸出到 文件
-x 語言 指定其后輸入文件的語言
允許的語言包括:c c++ assembler none
‘none’意味著恢復默認行為,即根據文件的擴展名猜測
源文件的語言
以 -g、-f、-m、-O、-W 或 --param 開頭的選項將由 gcc 自動傳遞給其調用的
不同子進程。若要向這些進程傳遞其他選項,必須使用 -W字母 選項。
很多小伙伴在自己寫代碼的時候,已經多次使用過include命令。使用庫函數之前,應該用include引入對應的頭文件。其實這種以#號開頭的命令稱為預處理命令。
C語言源文件要經過編譯、鏈接才能生成可執行程序:
1) 編譯(Compile)會將源文件(.c文件)轉換為目標文件。對于 VC/VS,目標文件后綴為.obj;對于GCC,目標文件后綴為.o。
編譯是針對單個源文件的,一次編譯操作只能編譯一個源文件,如果程序中有多個源文件,就需要多次編譯操作。
2) 鏈接(Link)是針對多個文件的,它會將編譯生成的多個目標文件以及系統中的庫、組件等合并成一個可執行程序。
關于編譯和鏈接的過程、目標文件和可執行文件的結構、.h 文件和 .c 文件的區別,我們將在后期專題中講解。
在實際開發中,有時候在編譯之前還需要對源文件進行簡單的處理。例如,我們希望自己的程序在 Windows 和 Linux 下都能夠運行,那么就要在 Windows 下使用 VS 編譯一遍,然后在 Linux 下使用 GCC 編譯一遍。但是現在有個問題,程序中要實現的某個功能在 VS 和 GCC 下使用的函數不同(假設 VS 下使用 a(),GCC 下使用 b()),VS 下的函數在 GCC 下不能編譯通過,GCC 下的函數在 VS 下也不能編譯通過,怎么辦呢?
這就需要在編譯之前先對源文件進行處理:如果檢測到是 VS,就保留 a() 刪除 b();如果檢測到是 GCC,就保留 b() 刪除 a()。
這些在編譯之前對源文件進行簡單加工的過程,就稱為預處理(即預先處理、提前處理)。
預處理主要是處理以開頭的命令,例如include stdio.h等。預處理命令要放在所有函數之外,而且一般都放在源文件的前面。
預處理是C語言的一個重要功能,由預處理程序完成。當對一個源文件進行編譯時,系統將自動調用預處理程序對源程序中的預處理部分作處理,處理完畢自動進入對源程序的編譯。
編譯器會將預處理的結果保存到和源文件同名的.i文件中,例如 main.c 的預處理結果在 main.i 中。和.c一樣,.i也是文本文件,可以用編輯器打開直接查看內容。
C語言提供了多種預處理功能,如宏定義、文件包含、條件編譯等,合理地使用它們會使編寫的程序便于閱讀、修改、移植和調試,也有利于模塊化程
預處理命令根據用途也分很多種。
但最重要的可能還是用來讓你寫的一份代碼可以跑在多個環境下。
因為C++不像java那樣有虛擬機來屏蔽運行環境,所以C++只能將與環境相關的地方用預處理來處理。
1 比如你的代碼是動態庫,又想運行在Windows下,又想運行在Linux下
2 你的代碼有時候想在不同的環境下有不同的表現,比如調試模式下打一些日志,運行模式責不然
3 比如你的代碼了解一種數據庫的時候使用A代碼,使用另一種數據庫的時候使用B代碼。
總之,C++的跨平臺必須依賴于預處理。
希望我沒有誤導你。
Linux中通過gcc的-E參數可以生成預處理文件。
實例:生成t.c源碼文件的預處理文件t.i
執行命令:gcc -E -o t.i t.c
下圖以hello world程序為例。
本文名稱:預處理命令linux,預處理命令以什么開頭
網站網址:http://vcdvsql.cn/article6/dsigsog.html
成都網站建設公司_創新互聯,為您提供企業建站、品牌網站建設、標簽優化、云服務器、網站設計公司、外貿網站建設
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯