关于makefile.txt
来自「关于vxworks的makefile」· 文本 代码 · 共 67 行
TXT
67 行
对于想在嵌入式操作系统下,进行程序开发的朋友来说,掌握Makefile文件无疑是握住了一把打开通往宝藏的钥匙。俗话说得好“工欲善其事,必先利其器”。本文主要是希望给那些准备为嵌入式系统编写应用开发程序的朋友,能起到一些小小的作用。
由于一个系统可能有很多源文件组成,一个或几个源代码的修改,可能会影响到许多和这些修改的文件想联系的其他文件,在以前,当诸多源文件修改以后,需要人们手动去编译那些发生变化的文件,然后在与其他文件进行链接生成可执行文件。当一个完整的系统由大量源码文件作成的话,其工作量是可想而知的。Make命令的出现,将人们从繁琐的工作中解放了出来。
Make优点在于用它来维护程序“不多,不重,不漏”,所谓“不多”是指,它只更新需要更新的文件,不会去动那些没有修改过的文件,“不重”是指,由于make检查一个文件是否需要更新时,是先检查它所依赖的所有文件,再对该文件进行更新,因此,即使一个文件有多个源文件过时,该文件也只需要修改一次,“不漏”make不会漏掉任何一个需要更新的文件。这样做的结果就是:使用make既能保证正确,又节约时间,十分方便有效。
makefile 是用bash语言写的,bash语言是很像BASIC语言的一种命令解释语言。这个文件里主要描述了有关哪些目标文件是从哪些依赖文件中产生的,是用何种命令来进行这个产生过程的。有了这些信息, make 会检查磁盘的文件,如果目标文件的日期(即该文件生成或最后修改的日期)至少比它的一个依赖文件日期早的话,make 就会执行相应的命令,以更新目标文件。
makefile一般被称为“makefile”或“Makefile”。还可以在 make 的命令行中指定别的文件名。如果没有特别指定的话,make就会寻找“makefile”或“Makefile”,所以为了简单起见,建议读者使用这两名字。如果要使用其他文件作为 makefile,则可利用类似下面的 make 命令选项指定 makefile 文件:
$ make -f makefilename
一个 makefile 主要含有一系列的规则,如下:
目标文件名 : 依赖文件名
(tab键) 命令
第一行称之为规则,第二行是执行规则的命令,必须要以tab键开始。
下面举一个简单的makefile的例子。
executable : main.o io.o
gcc main.o io.o -o executable
main.o : main.c
gcc -Wall -O -g -c main.c -o main.o
io.o : io.c
gcc -Wall -O -g -c io.c -o io.o
这是一个最简单的 makefile,make从第一条规则开始,executable是makefile最终要生成的目标文件。给出的规则说明executable依赖于两个目标文件main.o和io.o,只要executable 比它依赖的文件中的任何一个旧的话,下一行的命令就会被执行。但是,在检查文件 main.o 和 io.o 的日期之前,它会往下查找那些把 main.o 或 io.o 做为目标文件的规则。make先找到了关于 main.o 的规则,该目标文件的依赖文件是main.c。makefile后面的文件中再也找不到生成这个依赖文件的规则了。此时,make开始检查磁盘上这个依赖文件的日期,如果这个文件的日期比main.o 日期新的话,那么这个规则下面的命令 gcc -c main.c –o main.o 就会执行,以更新文件 main.o 。同样make对文件io.o 做类似的检查,它的依赖文件是io.c,对io.o的处理和main.o类似。
现在, 再回到第一个规则处,如果刚才两个规则中的任何一个被执行,最终的目标文件executable都需要重建(因为executable所依赖的其中一个 .o 文件就会比它新),因此链接命令就会被执行。
有了makefile,对任何一个源文件进行修改后,所有依赖于该文件的目标文件都会被重新编译(因为.o 文件依赖于.c 文件),进而最终可执行文件会被重新链接(因为它所依赖的.o 文件被改变了),再也不用手工去一个个修改了。
建议你清除一遍(清除depend.PENTIUMgnu 和 rtl8139.o)
可按以下步骤再做一遍,祝你好运!
C:\>cd C:\Tornado\host\x86-win32\bin 回车
C:\Tornado\host\x86-win32\bin>torvars 回车(以下是运行结果,下同)
C:\Tornado\host\x86-win32\bin>rem Command line build environments
C:\Tornado\host\x86-win32\bin>set WIND_HOST_TYPE=x86-win32
C:\Tornado\host\x86-win32\bin>set WIND_BASE=C:\Tornado
C:\Tornado\host\x86-win32\bin>set PATH=C:\Tornado\host\x86-win32\bin;C:\WINNT\sy
stem32;C:\WINNT;C:\WINNT\System32\Wbem;C:\Program Files\Microsoft Visual Studio\
Common\Tools\WinNT;C:\Program Files\Microsoft Visual Studio\Common\MSDev98\Bin;C
:\Program Files\Microsoft Visual Studio\Common\Tools;C:\Program Files\Microsoft
Visual Studio\VC98\bin
C:\Tornado\host\x86-win32\bin>cd C:\Tornado\target\src\drv\end\unsupported 回车
C:\Tornado\target\src\drv\end\unsupported>make CPU=PENTIUM clean 回车
vxrm C:\Tornado\target\lib\objPENTIUMgnuvx\rtl81x9.o
vxrm depend.PENTIUMgnu
C:\Tornado\target\src\drv\end\unsupported>make CPU=PENTIUM 回车
Creating depend.PENTIUMgnu
C:\Tornado\target\src\drv\end\unsupported>cc386 -BC:\Tornado/host/x86-win32/lib/
gcc-lib/ -M -mpentium -ansi -nostdinc -fvolatile -nostdlib -fno-builtin -fno-def
er-pop -Wall -IC:\Tornado\target/h -IC:\Tornado\target/h/ -DCPU=PENTIUM -c rtl81
x9.c | wtxtcl C:\Tornado\host\x86-win32\bin\depend.tcl C:\Tornado\target 1>>
depend.PENTIUMgnu
cc386 -BC:\Tornado/host/x86-win32/lib/gcc-lib/ -mpentium -ansi -nostdinc -fvolat
ile -nostdlib -fno-builtin -fno-defer-pop -Wall -IC:\Tornado\target/h -IC:\Tor
nado\target/h/ -DCPU=PENTIUM -c -o C:\Tornado\target\lib\objPENTIUMgnuvx/rtl
81x9.o rtl81x9.c
rtl81x9.c: In function `rtl81x9HandleRecvInt':
rtl81x9.c:1387: warning: unused variable `max_bytes'
rtl81x9.c:1387: warning: unused variable `limit'
ar386 crus C:\Tornado\targetlib/libPENTIUMgnuvx.a C:\Tornado\target\lib\objPENT
IUMgnuvx rtl81x9.o
到这编译就成功地完成了。
你没有必要把rtl 81x9.o拷到了C:\Tornado\target\config\pcPentium目录下。
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?