2016-12-12 6 views
0

私は、コマンドラインからの入力を使ってmakefileを使ってプログラムを実行する方法を理解しようとしています。メイクファイルでコマンドラインを実行する

たとえば、2つの整数を取り込んで加算して結果を返すプログラムfooがあるとします。私は、例えばメイクテストに入力すると、メイクファイルではそれが私のメイクに行くよ、それはように、この

test: 
    ./foo 1 1 
    ./foo 2 2 

のように見えると思いますが、私はそれをやろうとしているとき、それはしていません走る私が紛失しているものはありますか?

+2

'make'コマンドを実行すると、' foo'があるディレクトリにいますか?プログラムの絶対パスを使用するとどうなりますか?ああ、*何のエラーがありますか? –

+0

@Someprogrammerdude実際には、今はプロジェクトと呼ばれるメインフォルダがあり、実行可能ファイルはプロジェクト/プログラムにあり、テスト用メイクファイルはプロジェクト/テストにあります。 ./project/program/foo 1 1を動作させるだけでいいと思っていました。私が得ているエラーは、./project/program/fooコマンドが見つかりませんでした。 – user3483844

+0

'$ PWD/project/program/foo'が存在していて(xビットがセットされていますか)確信していますか?ところで、エラーは 'project/program/foo'については不平を言っていますが、あなたはあなたのmakefileにあります。多分あなたは間違った場所を探しています。いずれにしても、makefileの* test *ターゲットの下に最初のコマンドとして 'ls -l'を置きます。また、 'foo'がシェルスクリプトである場合は、' -x'で呼び出すことにします。たぶんこのfoo **は**実行されますが、別のディレクトリで別の* foo *を実行しようとします。これによりエラーが発生します。 – user1934428

答えて

0

あなたがして、あなたのMakefileの絶対パスを取得することができます:

:そのパスと foo invoque、

最後
exe_path := $(mkfile_path)/../program 

:あなたとあなたの実行可能ファイルのパスを構築することができ、その後

mkfile_path := $(abspath $(lastword $(MAKEFILE_LIST))) 

$(exe_path)/foo 1 1 
+0

abspath、lastword、MAKEFILE_LISTとは何ですか? – user3483844

+0

これらはGNU Makeの内部関数と変数です(ドキュメント:[abspath](https://www.gnu.org/software/make/manual/html_node/File-Name-Functions.html#File-Name-Functions)を参照) 、[lastword](https://www.gnu.org/software/make/manual/html_node/Text-Functions.html#Text-Functions)、[MAKEFILE_LIST](https://www.gnu.org/software/ make/manual/html_node/Special-Variables.html#index-makefiles_002c-and-MAKEFILE_005fLIST-variable)) – mouviciel

関連する問題