実験的なサンプル ファイル: (必ずしも必須ではありません。この記事にはすべての内容が含まれており、便宜上のみここに記載されています)
「組み込みリアルタイム オペレーティング システム μCOS-II の原理と応用 - Ren Zhe (第 3 版)」を勉強すると、説明されていない詳細がたくさんあります。いくつかの実験例を参照して、メイクファイルの基本的な使用方法をいくつかまとめます。
以下は参照のみを目的とした学習プロセスの一部です。
実験前の注意:
この実験は Borland C3.1 の簡易版で行っており、bc ファイルが必要ですので、bc ファイルを E ドライブのルートディレクトリに置き、環境変数を設定してください。
一部の win8-64 ビット システムでは、make.exe などのツールを使用できない場合があります。
1. bc コンパイル済みファイルの実験手順:
bc フォルダーが e ドライブのルート ディレクトリに直接配置され、環境変数 e:\bc\bin が設定されていると仮定します。
bc フォルダーでは E ドライブの bcc.exe ツールを使用します。コマンドは e:\bc\bin\bcc...
1. 上記の例に従ってファイルの場所を設定します (変更可能)。
2. 環境変数を設定します: [マイ コンピュータ] > [プロパティ] > [詳細設定] > [環境変数] ポップアップ ダイアログ ボックスで、つまり、環境変数ダイアログ ボックスの下に新しい PATH 変数名を作成し、d:\EnglishSetup\bc\ を追加します。 bin 変数値
を変数値に変換します。
(make.exe などが配置されているディレクトリでは、コンピュータはこのディレクトリで make プログラムを見つけることができます。大文字と小文字は区別されません) (または、
PATH がすでに存在する場合は変数値を追加し、他の変数値はセミコロンで区切られます) 。
変数を設定する目的は、毎回フルパスを入力する必要をなくし、コマンドの入力を簡素化することです。
3. ソース ファイルを作成します (メモ帳やテキスト ドキュメントなどの他の編集ツールを使用できます) (標準化されたディレクトリに置くのが最善です) 4.
DOS ウィンドウを開きます (コマンド ライン環境) (Win+ の後に cmd を検索します) F で開始し、cmd を実行します)。
コマンド ライン コマンドを使用して、ソース ファイルが配置されているファイル ディレクトリを入力します (重要)。
(cmd コマンド ラインの DOS コマンドでは大文字と小文字が区別されませんが、コマンドのポインタまたはパラメータでは大文字と小文字が区別されます)
5. 対応するコマンドを使用して、ソース ファイルをコンパイルまたは接続します。
6. 対応する .obj または .exe ファイルを生成します。
7. 例: 次のコマンドのスペースとタブ キーに注意してください。
(cmd コマンド ライン ウィンドウでは、特定のフォルダーやその他の一般的に使用されるコマンド E:、cd、cd\、dir などを入力することに注意してください。具体的な方法については、Baidu を参照してください)。
たとえば、ソース ファイル test.c があるとします。
//test.c コード
#include<stdio.h>
void main(void){ printf("Hello, world!\n"); }
a. 最初に cmd でコンパイルするファイルのディレクトリ パスを入力し、次にコマンド ライン コマンドを使用して独自のファイルをコンパイルします
。コマンドは次のとおりです: (スペースに注意してください)
bcc -c -ml -Ie:\bc\include -Le:\bc\lib test.c
(注 - オプション文字 (文字) が後に続く必要があります)
注: e:\ bc\include および e:\bc\ lib は、インクルード ファイルと lib ファイルが配置されているパスです。
このコマンドは、ソース ファイル test.c を使用して test.obj ファイルを生成します。
b. ターゲット ファイルを実行可能ファイルに接続します
。c0l.obj (起動モジュールである c0L.obj) と test.obj を接続する必要があります。tlink.exe を使用して接続します:
(具体的なファイル名については、bc の各フォルダーの下にあるファイル名を参照してください)
cmd に入力された接続コマンドは次のとおりです:
tlink e:\bc\lib\c0l.obj test.obj,test,test ,e:\bc\lib\cl.lib
が接続され、test.exe 実行可能ファイルが生成されます。
test.c によって生成された test.exe ではコマンド ライン ウィンドウが点滅するだけの可能性があるため、hello.c の例が追加されています。
具体的な方法は上記と似ていますが、「test」を「hello」に変更する点が異なります。
//hello.c コード
#include<stdio.h>
#include<stdlib.h>void main(void)
{
int i;
i=20;
printf("Hello,world!\n");
printf("i=%d\n",i);
system("pause");//调试时暂停程序
}
需要按照要求输入命令即可,其中的命令改为:
bcc -c -ml -Ie:\bc\include -Le:\bc\lib hello.c
tlink e:\bc\lib\c0l.obj test.obj,hello,hello,e:\bc\lib\cl.lib
二、makefile的简单实验:
说明:
使用前最好将文件放在较浅的路径目录下,以便cmd命令尽可能短。
先建立一个名叫makefile.mak的文件(特别注意后缀,可以使用txt写入内容后修改后缀)
makefile.mak文件的内容:
##生成11和22后将其删除##(#表示注释)
target1:
md 11
target2:
md 22
target3:
rd 11
rd 22
###
cmd窗口命令行进入makefile.mak所在目录,
第一次运行输入make后按回车
上述代码在当前文件夹下生成名叫11的文件夹(执行第一段代码)
第二次键入:make target2
上述代码在当前文件夹下生成名叫22的文件夹(执行第二段代码)
第三次键入:make target3
上述代码将刚建立的11和22两个目录删除(执行第三段代码)
三、makefile编译多个文件实验
1.全部文件为pa.c,pa.h,pb.c,pb.h,test.c(及附带文件makefile.mak和testlink.txt)
以下假设bc文件夹直接放在e盘根目录下,并设置好环境变量e:\bc\bin。
且上述文件放在test文件夹下。使用前最好将test文件夹放在较浅的目录下。
2.单步输入cmd命令行方法如下:(注意命令中的空格)
若bc文件夹直接放在e盘根目录下,设置好环境变量e:\bc\bin后,
cmd进入上述五个文件所在的目录test后依次输入的指令为:
bcc -c -ml -Ie:\bc\include -I.\ -Le:\bc\lib pa.c
bcc -c -ml -Ie:\bc\include -I.\ -Le:\bc\lib pb.c
bcc -c -ml -Ie:\bc\include -I.\ -Le:\bc\lib test.c
(多了'-I.\'。应该是由于多了自己建立的头文件)
依次生成pa.obj,pb.obj,test.obj文件。
cmd输入连接命令:
tlink e:\bc\lib\c0l.obj pa.obj pb.obj test.obj,test,test,e:\bc\lib\cl.lib
该实验中最后生成名为test.exe的程序。
(若使用了printf()函数输出中文,中文部分可能会出现为乱码)
3.(1)使用makefile.mak及make命令方法如下:
使用makefile.mak及make命令来编译(pa.c,pa.h,pb.c,pb.h,test.c)生成test.exe
makefile.mak文件代码(内容)可为:(#为注释)
(需要先建立连接文件testlink.txt,且要注意以下的空格与tab键。‘:’后有空格,命令前有tab键)
################################################## 创建可执行文件(exe)
TEST.EXE:
TLINK @TESTLINK.txt
#################################################
# 创建各个目标文件(obj)
PA.OBJ:
bcc -c -ml -Ie:\bc\include -Le:\bc\lib pa.c
PB.OBJ:
bcc -c -ml -Ie:\bc\include -Le:\bc\lib pb.c
TEST.OBJ:
bcc -c -ml -Ie:\bc\include -Le:\bc\lib test.c
#################################################
需要键入的cmd命令行命令依次为:
make pa.obj
make pb.obj
make test.obj
make
(由于上述采用文件名作为标号,即目标,故make后面输入的可以是文件名)
注意需要建立一个叫testlink.txt的连接文件,并将需要连接的文件按格式要求写入其中。
testlink.txt的内容为:
e:\bc\lib\c0l.obj pa.obj pb.obj test.obj
test
test
e:\bc\lib\cl.lib
(2)上述操作需要输入的make命令太多,若采用命令集形式,只需要输入一次make即可
形式为:
目标: 生成目标所需要的文件名(依赖文件,其实是转移语句标号)
命令集
相当于生成目标的条件不满足时,程序执行将发生转移,转移的目标是以依赖文件名为标号或目标的程序段。
(注意命令集前面有tab键、冒号':'后有空格。)
makefile.mak文件代码(内容)可为:(注意空格与tab键‘:’后有空格,且每个命令前有tab键)
#################################################
TEST.EXE: PA.OBJ PB.OBJ TEST.OBJ
TLINK @TESTLINK.TXT
PA.OBJ:
bcc -c -ml -Ie:\bc\include -Le:\bc\lib pa.c
PB.OBJ:
bcc -c -ml -Ie:\bc\include -Le:\bc\lib pb.c
TEST.OBJ:
bcc -c -ml -Ie:\bc\include -Le:\bc\lib test.c
#################################################
需要键入的cmd命令为:make
(3)规范完整的makefile.mak文件代码(内容)为:
(凡是以目标为标号的程序段都要写上目标的依赖)
#################################################
TEST.EXE: PA.OBJ PB.OBJ TEST.OBJ
TLINK @TESTLINK.TXT
PA.OBJ: PA.C PA.H
bcc -c -ml -Ie:\bc\include -Le:\bc\lib pa.c
PB.OBJ: PB.C PB.H
bcc -c -ml -Ie:\bc\include -Le:\bc\lib pb.c
TEST.OBJ: TEST.C
bcc -c -ml -Ie:\bc\include -Le:\bc\lib test.c
#################################################
需要键入的cmd命令同样为:make
希望能帮到大家。