2016-12-10 13 views
-1

この単純なメイクファイルにアクセス権を追加するにはどうすればよいですか?基本的なメイクファイルにアクセス許可を与えるにはどうすればいいですか

all: shell ls cat groups 

shell: shell.o cd.o 
    gcc shell.o cd.o -o shell 

cat: cat.o 
    gcc -c cat.c -o cat 

ls: ls.o header.h 
    gcc -c ls.c -o ls 

groups: groups.o groups.h 
    gcc -c groups.c -o groups 

shell.o: shell.c tlpi_hdr.h 
    gcc -c shell.c 

cd.o: cd.c tlpi_hdr.h 
    gcc -c cd.c 

cat.o: cat.c tlpi_hdr.h 
    gcc -c cat.c 

ls.o: ls.c header.h 
    gcc -c ls.c 

groups.o: groups.c groups.h 
    gcc -c groups.c 

clean: 
    rm *.o shell cat ls groups 

作成したシェル内でcat/ls/groups/cdを実行する必要がありますが、アクセス権がないため実行できません。これどうやってするの?一例として、

+2

通常、コンパイラは生成するプログラムを実行可能にするため、実行する必要はありません。ディレクトリを 'PATH'に追加する必要があるかもしれません。あなたの 'cd'は別のバイナリとしてどのように動作しますか? –

+0

'make'とその組み込みルールの詳細を学んでください。 'make -p'を試してみてください。 [詳細](http://stackoverflow.com/a/16751650/841108) –

+0

[Advanced Linux Programming](http://advancedlinuxprogramming.com/)を参照してください。 'cd'は外部プログラムではありません(シェル組み込みでなければなりません)。 –

答えて

1

、このルール:

groups: groups.o groups.h 
    gcc -c groups.c -o groups 

あなたが-cオプションが含まれているため(の代わりに通常のgroups.oの)groupsというオブジェクトファイルを生成するためにGCCに指示します。オブジェクトファイルは実行可能ファイルではないため、コンパイラは実行ファイルを実行可能にしません。そのため、アクセス許可の問題が発生します。このルールでは、groups.oをビルドするにはmakeが必要ですが、ソースコードを再コンパイルするので、オブジェクトファイルを無視します。

あなたはより多くのような何か書きたかった:あなたはより多くのマクロを使用する必要が

groups: groups.o 
    gcc groups.o -o groups 
groups.o: groups.h 

- またはmakegroups.cからgroupsを構築する方法を知っているので、あなたがメイクファイルのうち、ルールを残すことができるし。

また、警告オプションを使用してコンパイルする必要があります。最小で-Wall;好ましくは-Wall -Wextra -Werror(これ以上のオプションを使用します)。最適化(-O3)が必要な場合があります。デバッグが必要な場合があります(-g)。これらは、通常、マクロを設定してコマンドで使用します。

関連する問題