導航:首頁 > 源碼編譯 > 嵌套級make編譯

嵌套級make編譯

發布時間:2022-12-28 20:29:49

① 如何在android系統源碼的環境下用make來編譯

本來以為就沒有辦法在應用程序這一層改系統時間了,後來在網上搜了好久,知道這個目的還是可以達到的。 第一個方法簡單點,不過需要在Android系統源碼的環境下用make來編譯: 1. 在應用程序的AndroidManifest.xml中的manifest節點中加入 android.

② Android系統編譯命令make

在編譯Android系統時,需要先執行2條命令,來設置必要的環境變數。

接下來就可以執行make系列命令,來完成不同的需要。

make clean 用來清除編譯歷史,開始一個全新的編譯。
make -j 或 make -j8 啟動編譯過程。 -j 後面的數字代表要使用的cpu thread的數目。

在完成了全編譯後,才能執行生成OTA升級包的操作。

注意事項:

③ Makefile.XX文件如何用make來編譯

1. 通過-f選項指定make的文件。
make -f Makefile.xx
2. (同樓上)把Makefile.xx文件修改為Makefile或makefile

④ 多級目錄中存在多個makefile時,編譯的順序如何

一般來說,如果存在多級目錄,那麼再用makefile的時候,最好在每個目錄下也寫一個簡單的子makefile,這樣在總目錄下寫一個總的makefile,然後再總的makefile中調用子makefile,這樣寫起來就會比較清晰,編譯順序是要看你的總makefile中的步驟。
另外,如果你寫好之後,你也可以make -n一下,這樣也就可以看出make的編譯順序了!
也是剛開始學習makefile,共勉!

⑤ tarball方式編譯安裝及升級-make、patch

tarball方式編譯安裝及升級-make、patch1、概念:原碼進行編譯成二進制機構可執行程序,先要make與偵測程序一般是config一起生成編譯連接文件makefile,再由makefile編譯成可執行文件。Tarball其實是原碼的tar打包與壓縮的包。rpm是指linux商家幫你編譯好了,省去了長時間編譯而發布的包,但不同類型的系統就不能用。
www.dnjsb.com
函數庫即提供外部調用的,有點像dll。2、gcc,是C語句的編譯器,一般是先編譯成目標文件,再連結成一個可執行文件。3、make可以方便進行編譯,因為它把要編譯的命令及順序都寫到makefile這個文件里了。
www.dnjsb.com
4、makefile文件放在程序的原碼里的一級目錄,它的語法:[root@www
~]#
vi
makefileLIBS
=
-lm
#這是變數OBJS
=
main.o
haha.o
sin_value.o
cos_value.oCFLAGS
=
-Wallmain:
${OBJS}gcc
-o
$@
${OBJS}
${LIBS}
<==那個
$@
就是
main
!$@
代表目前的標的(target)clean:rm
-f
main
${OBJS}#標的:有相關性原代碼文件
#第二行開頭要tab一下,這一行就是執行的命令,如腳本命令5、具體目錄規則如下:
a、最好將
tarball
的原始資料解壓縮到
/usr/local/src
當中;
b、安裝時,最好安裝到
/usr/local
這個預設路徑下;
c、考慮未來的反安裝步驟,最好可以將每個軟體單獨的安裝在
/usr/local
底下;
d、為安裝到單獨目錄的軟體之
man
page
加入
man
path
搜尋:如果你安裝的軟體放置到
/usr/local/software/
,那麼
man
page
搜尋的設定中,可能就得要在
/etc/man.config
內的
40~50
行左右處,寫入如下的一行:
MANPATH
/usr/local/software/man
這樣才可以使用
man
來查詢該軟體的線上文件!6、偵測配置程序./configure
--help
,可以查看支持參數及說明一般有的參數是安裝到哪個目錄的參數:--prefix=/path7、一般的步驟(以ntp為例):cd
/usr/local/srctar
-zxvf
/root/ntp-4.2.4p7.tar.gzcd
ntp-4.2.4p7/cat
INSTALL./configure
--help
|
more./configure
--prefix=/usr/local/ntpmake
clean;
makemake
check
#此步如果不檢測也行make
install8、原碼進行更新升級:
a、cat
~/main_0.1_to_0.2.patch
#查看第一行它的相對目錄是什麼樣的
b、用patch
-p數字
<
patch_file進行更新,這里的數字表示舊的目錄要去掉幾個/,如果不去則用patch
-p1
<
patch_file,要根據a步來判斷。如main-0.1/xxx

main-0.2/xxx
進行對比,而你現在就在main-0.1目錄下,那麼可以這樣patch
-p1
<
../main_0.1_to_0.2.patch
c、一般會發布更新包,以.patch為後綴,且會標明從什麼版本到什麼版本,不能跨多版本升級的,要順序升級,如跨了多個更新包,則要把之前的更新包一個個更新
d、make
clean;
make
make
check
#此步如果不檢測也行
make
install
如果報錯,可能就需要執行一下./configure,patch只是更新了有變化的原代碼而已。
e、如果
patch
錯誤呢?我們的
patch
是可以還原的啊!透過patch
-R
<
../main_0.1_to_0.2.patch
即可。(main_0.1_to_0.2.patch只是個例子)

⑥ 如何在Windows下通過Cmake編譯和使用PCRE

CMake是一個比make更高級的編譯配置工具,它可以根據不同平台、不同的編譯器,生成相應的Makefile或者vcproj項目。
通過編寫CMakeLists.txt,可以控制生成的Makefile,從而控制編譯過程。CMake自動生成的Makefile不僅可以通過make命令構建項目生成目標文件,還支持安裝(make install)、測試安裝的程序是否能正確執行(make test,或者ctest)、生成當前平台的安裝包(make package)、生成源碼包(make package_source)、產生Dashboard顯示數據並上傳等高級功能,只要在CMakeLists.txt中簡單配置,就可以完成很多復雜的功能,包括寫測試用例。
如果有嵌套目錄,子目錄下可以有自己的CMakeLists.txt。
總之,CMake是一個非常強大的編譯自動配置工具,支持各種平台,KDE也是用它編譯的,感興趣的可以試用一下。

准備活動:
(1)安裝cmake。
下載地址:
根據自己的需要下載相應的包即可,Windows下可以下載zip壓縮的綠色版本,還可以下載源代碼。
Windows下CMake的使用
(2)運行cmake的方法。(GUI、命令行)

CMake使用步驟:
運行GUI的cmake界面:
cmake-2.8.1-win32-x86\bin\cmake-gui.exe
Windows下CMake的使用
執行Configure:
運行之後,生成了如下文件:
Windows下CMake的使用
生成Makefile:
執行Generate之後生成如下文件:
Windows下CMake的使用
運行make進行編譯:
Windows下CMake的使用
編譯完成後,在build目錄生成Tutorial.exe,運行Tutorial.exe 25就可以看到運行結果:
Windows下CMake的使用
運行make install安裝程序:
Windows下CMake的使用
運行make test進行測試:
Windows下CMake的使用

通過cmake tutorial學習CMake配置方法

可以在源代碼的Tests/Turorial目錄中找到這個手冊對應的代碼。
Windows下CMake的使用
1、Step1。
(如果不知道如何使用cmake,以及如何使用編譯產生的Turorial.exe,可先看下前面「CMake使用步驟」的說明,它以Step4為例詳細介紹了使用過程,Step1的配置可能不夠完全,比如無法運行make install,無法運行make test,但可以參考。)
簡單的程序編譯。
(1)運行GUI的cmake,指定要編譯的源代碼路徑和二進制文件路徑(會自動創建)。
Windows下CMake的使用
(2)點擊Configure,配置成功後,再點擊Generate。
配置需要選擇合適的編譯器,雖然我安裝了VC2008,但沒有配置成功;選擇Unix Makefiles,配置成功,它自動找到了DevC++下的gcc.exe等編譯器。
Windows下CMake的使用
(3)在build3目錄執行make,就能夠編譯生成Turorial.exe了。
D:\Projects\Lab\testngpp\cmake-2.8.1\Tests\Tutorial\Step1\build3>make
Linking CXX executable Tutorial.exe
[100%] Built target Tutorial
可以運行一下Turorial.exe:
D:\Projects\Lab\testngpp\cmake-2.8.1\Tests\Tutorial\Step1\build3>Tutorial.exe
Tutorial.exe Version 1.0
Usage: Tutorial.exe number
D:\Projects\Lab\testngpp\cmake-2.8.1\Tests\Tutorial\Step1\build3>Tutorial.exe 4
The square root of 4 is 2
2、Step2
把子目錄編譯為庫,並且鏈接到最終的可執行文件。
include_directories ("${PROJECT_SOURCE_DIR}/MathFunctions")
add_subdirectory (MathFunctions) # 使得子目錄MathFunctions也能被編譯

# add the executable
add_executable (Tutorial tutorial.cxx)
target_link_libraries (Tutorial MathFunctions)
產生makefile:
在GUI上點擊Configure,之後Generate還是灰色,再次點擊Configure,Generate就可以點擊了。
編譯:

⑦ make命令編譯內核出現錯誤

安裝下內核的header包吧。每個內核版本都有對應的。

⑧ Makefile入門(八):make運行

一般來說,最簡單的就是直接在命令行下輸入make命令,make命令會找當前目錄的makefile來執行,一切都是自動的。但也有時你也許只想讓make重編譯某些文件,而不是整個工程,而又有的時候你有幾套編譯規則,你想在不同的時候使用不同的編譯規則,等等。本章節就是講述如何使用 make命令的。

make命令執行後有三個退出碼:

0 —— 表示成功執行。

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

2 —— 如果你使用了make的「-q」選項,並且make使得一些目標不需要更新,那麼返回2。

Make的相關參數我們會在後續章節中講述。

前面我們說過,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可以找到其隱含規則推導規則,那麼這個隱含目標同樣可以被指定成終極目標。

有一個make的環境變數叫「MAKECMDGOALS」,這個變數中會存放你所指定的終極目標的列表,如果在命令行上,你沒有指定目標,那麼,這個變數是空值。這個變數可以讓你使用在一些比較特殊的情形下。比如下面的例子:

基於上面的這個例子,只要我們輸入的命令不是「make clean」,那麼makefile會自動包含「foo.d」和「bar.d」這兩個makefile。

使用指定終極目標的方法可以很方便地讓我們編譯我們的程序,例如下面這個例子:

從這個例子中,我們可以看到,這個makefile中有四個需要編譯的程序——「prog1」, 「prog2」, 「prog3」和 「prog4」,我們可以使用「make all」命令來編譯所有的目標(如果把all置成第一個目標,那麼只需執行「make」),我們也可以使用 「make prog2」來單獨編譯目標「prog2」。

即然make可以指定所有makefile中的目標,那麼也包括「偽目標」,於是我們可以根據這種性質來讓我們的makefile根據指定的不同的目標來完成不同的事。在Unix世界中,軟體發布時,特別是GNU這種開源軟體的發布時,其makefile都包含了編譯、安裝、打包等功能。我們可以參照這種規則來書寫我們的makefile中的目標。

<dl style="font-size: 12.6667px; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);">

<dt>「all」</dt>

<dd>這個偽目標是所有目標的目標,其功能一般是編譯所有的目標。</dd>

<dt>clean」</dt>

<dd>這個偽目標功能是刪除所有被make創建的文件。</dd>

<dt>「install」</dt>

<dd>這個偽目標功能是安裝已編譯好的程序,其實就是把目標執行文件拷貝到指定的目標中去。</dd>

<dt>print」</dt>

<dd>這個偽目標的功能是例出改變過的源文件。</dd>

<dt>「tar」</dt>

<dd>這個偽目標功能是把源程序打包備份。也就是一個tar文件。</dd>

<dt>「dist」</dt>

<dd>這個偽目標功能是創建一個壓縮文件,一般是把tar文件壓成Z文件。或是gz文件。</dd>

<dt>TAGS」</dt>

<dd>這個偽目標功能是更新所有的目標,以備完整地重編譯使用。</dd>

<dt>「check」和「test」</dt>

<dd>這兩個偽目標一般用來測試makefile的流程。</dd>

</dl>

當然一個項目的makefile中也不一定要書寫這樣的目標,這些東西都是GNU的東西,但是我想,GNU搞出這些東西一定有其可取之處(等你的 UNIX下的程序文件一多時你就會發現這些功能很有用了),這里只不過是說明了,如果你要書寫這種功能,最好使用這種名字命名你的目標,這樣規范一些,規范的好處就是——不用解釋,大家都明白。而且如果你的makefile中有這些功能,一是很實用,二是可以顯得你的makefile很專業(不是那種初學者的作品)。

有時候,我們不想讓我們的makefile中的規則執行起來,我們只想檢查一下我們的命令,或是執行的序列。於是我們可以使用make命令的下述參數:

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

「-t」 「--touch」 這個參數的意思就是把目標文件的時間更新,但不更改目標文件。也就是說,make假裝編譯目標,但不是真正的編譯目標,只是把目標變成已編譯過的狀態。

「-q」 「--question」 這個參數的行為是找目標的意思,也就是說,如果目標存在,那麼其什麼也不會輸出,當然也不會執行編譯,如果目標不存在,其會列印出一條出錯信息。

「-W <file>;」 「--what-if=<file>;」 「--assume-new=<file>;」 「--new-file=<file>;」 這個參數需要指定一個文件。一般是是源文件(或依賴文件),Make會根據規則推導來運行依賴於這個文件的命令,一般來說,可以和「-n」參數一同使用,來查看這個依賴文件所發生的規則命令。

另外一個很有意思的用法是結合「-p」和「-v」來輸出makefile被執行時的信息(這個將在後面講述)。

下面列舉了所有GNU make 3.80版的參數定義。其它版本和產商的make大同小異,不過其它產商的make的具體參數還是請參考各自的產品文檔。

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

「-B」 「--always-make」 認為所有的目標都需要更新(重編譯)。

「-C <dir>」 「--directory=<dir>」 指定讀取makefile的目錄。如果有多個「-C」參數,make的解釋是後面的路徑以前面的作為相對路徑,並以最後的目錄作為被指定目錄。如:「make –C ~hchen/test –C prog」等價於「make –C ~hchen/test/prog」。

「—debug[=<options>]」 輸出make的調試信息。它有幾種不同的級別可供選擇,如果沒有參數,那就是輸出最簡單的調試信息。下面是<options>的取值:

a —— 也就是all,輸出所有的調試信息。(會非常的多)

b —— 也就是basic,只輸出簡單的調試信息。即輸出不需要重編譯的目標。

v —— 也就是verbose,在b選項的級別之上。輸出的信息包括哪個makefile被解析,不需要被重編譯的依賴文件(或是依賴目標)等。

i —— 也就是implicit,輸出所有的隱含規則。

j —— 也就是jobs,輸出執行規則中命令的詳細信息,如命令的PID、返回碼等。

m —— 也就是makefile,輸出make讀取makefile,更新makefile,執行makefile的信息。

「-d」 相當於「--debug=a」。

「-e」 「--environment-overrides」 指明環境變數的值覆蓋makefile中定義的變數的值。

「-f=<file>」 「--file=<file>」 「--makefile=<file>」 指定需要執行的makefile。

「-h」 「--help」 顯示幫助信息。

「-i」 「--ignore-errors」 在執行時忽略所有的錯誤。

「-I <dir>」 「--include-dir=<dir>」 指定一個被包含makefile的搜索目標。可以使用多個「-I」參數來指定多個目錄。

「-j [<jobsnum>]」 「--jobs[=<jobsnum>]」 指同時運行命令的個數。如果沒有這個參數,make運行命令時能運行多少就運行多少。如果有一個以上的「-j」參數,那麼僅最後一個「-j」才是有效的。(注意這個參數在MS-DOS中是無用的)

「-k」 「--keep-going」 出錯也不停止運行。如果生成一個目標失敗了,那麼依賴於其上的目標就不會被執行了。

「-l <load>」 「--load-average[=<load]」 「—max-load[=<load>]」 指定make運行命令的負載。

「-n」 「--just-print」 「--dry-run」 「--recon」 僅輸出執行過程中的命令序列,但並不執行。

「-o <file>」 「--old-file=<file>」 「--assume-old=<file>」 不重新生成的指定的<file>,即使這個目標的依賴文件新於它。

「-p」 「--print-data-base」 輸出makefile中的所有數據,包括所有的規則和變數。這個參數會讓一個簡單的makefile都會輸出一堆信息。如果你只是想輸出信息而不想執行makefile,你可以使用「make -qp」命令。如果你想查看執行makefile前的預設變數和規則,你可以使用 「make –p –f /dev/null」。這個參數輸出的信息會包含著你的makefile文件的文件名和行號,所以,用這個參數來調試你的 makefile會是很有用的,特別是當你的環境變數很復雜的時候。

「-q」 「--question」 不運行命令,也不輸出。僅僅是檢查所指定的目標是否需要更新。如果是0則說明要更新,如果是2則說明有錯誤發生。

「-r」 「--no-builtin-rules」 禁止make使用任何隱含規則。

「-R」 「--no-builtin-variabes」 禁止make使用任何作用於變數上的隱含規則。

「-s」 「--silent」 「--quiet」 在命令運行時不輸出命令的輸出。

「-S」 「--no-keep-going」 「--stop」 取消「-k」選項的作用。因為有些時候,make的選項是從環境變數「MAKEFLAGS」中繼承下來的。所以你可以在命令行中使用這個參數來讓環境變數中的「-k」選項失效。

「-t」 「--touch」 相當於UNIX的touch命令,只是把目標的修改日期變成最新的,也就是阻止生成目標的命令運行。

「-v」 「--version」 輸出make程序的版本、版權等關於make的信息。

「-w」 「--print-directory」 輸出運行makefile之前和之後的信息。這個參數對於跟蹤嵌套式調用make時很有用。

「--no-print-directory」 禁止「-w」選項。

「-W <file>」 「--what-if=<file>」 「--new-file=<file>」 「--assume-file=<file>」 假定目標<file>;需要更新,如果和「-n」選項使用,那麼這個參數會輸出該目標更新時的運行動作。如果沒有「-n」那麼就像運行UNIX的「touch」命令一樣,使得<file>;的修改時間為當前時間。

「--warn-undefined-variables」 只要make發現有未定義的變數,那麼就輸出警告信息。

⑨ 用make指令編譯內核後不能成功,出現以下提示,應該怎麼解決 make: arm-none-linux-gnueabi-gcc: Comman

應該是Linux系統版本問題,Linux版本太新的話有寫地方和以前的方法就不一樣了,當初我編譯的時候紅帽子比較早的版本可以成功,Ubuntu的就不行了,樓主網路搜下,很多這方面的博客,試試紅帽子。

⑩ linux用make語句編譯

$ cat makefile
.SUFFEXES:.c .o

.c.o:
gcc -Wall -c $<

OBJS=my_file.o

all: my_exec_file

my_exec_file:$(OBJS)
gcc -Wall $(OBJS) -o $@
$ make
gcc -Wall -c my_file.c
gcc -Wall my_file.o -o my_exec_file
簡單說明:
.SUFFEXES:.c .o :告訴make識別哪些源程序和目標程序
.c.o: :告訴make命令.c程序如何生成.o文件,採用其下的gcc -Wall -c $<($<代表任意一個編譯時用到的.c文件)命令。
all: my_exec_file :告訴make命令自動生成哪個可執行程序
my_exec_file:$(OBJS) :告訴make命令如何生成my_exec_file文件,需要哪些目標代碼($(OBJS)),採用其下的命令: gcc -Wall $(OBJS) -o $@ ($@代表my_exec_file,即要編譯的可執行文件名)

閱讀全文

與嵌套級make編譯相關的資料

熱點內容
海南省分布式伺服器雲主機 瀏覽:31
世紀江湖聊天室源碼 瀏覽:247
阿里網盤的文件如何解壓 瀏覽:781
簡單淘寶客源碼 瀏覽:680
煎餅解壓視頻教程全集 瀏覽:339
平行線pdf 瀏覽:631
android鎖屏不退出程序運行 瀏覽:635
sap連接的伺服器地址是 瀏覽:426
linuxshell腳本從入門到精通 瀏覽:725
python進制均值 瀏覽:629
pdfformac 瀏覽:318
用虛擬伺服器是什麼目的 瀏覽:192
壓縮機阿里巴巴 瀏覽:637
主圖指標源碼回踩 瀏覽:161
怎麼驗證伺服器埠 瀏覽:612
如何添加密碼卡 瀏覽:671
2021好聲音在哪個app觀看 瀏覽:126
壓縮層計算深度 瀏覽:391
愛奇藝怎麼不能源碼輸出 瀏覽:834
小孩視力訓練app哪個好 瀏覽:831