0

わかりました、これは簡単な質問だと思います。.c ファイルと Makefile があります。問題があれば、Linux 12.10 ubuntuを使用しています。これら2つのファイルがmakeを利用しているディレクトリに実行可能ファイル、ソース、およびオブジェクトファイルを作成するためにこれら2つのファイルを取得するためにターミナルに書き込む方法を理解しようとしています。nasm をインストールしましたが、他に何かインストールする必要があるかどうかわかりません。これは現在私がやっていることですが、Windowsでできることの背後にある基本を理解していないようですが、Linuxで動作させることはできません。Makefile を Linux 以外に変更しました。

これはおそらく非常に簡単であることはわかっていますが、私はLinuxにかなり慣れていないため、かなり簡単に理解できるはずだと思うことのいくつかを本当に理解していないので、これが簡単に思えたら謝罪します.

$ make firstlab.c firstlab

正しいディレクトリに移動した後、ターミナルに入力しているものです。私のフィードバックは「

make: Nothing to be done for `homework1.c'.
gcc     homework1.c   -o homework1
homework1.c: In function ‘main’:
homework1.c:20:5: warning: incompatible implicit declaration of built-in function ‘printf’ [enabled by default]
homework1.c:21:5: warning: incompatible implicit declaration of built-in function ‘scanf’ [enabled by default]

"

#include <stdlib.h>
#include <stdio.h>



int main (int argc, char* argv[])
{

int firstNumber = 0;
int secondNumber = 0;
int result = 0;

printf("Enter first value: ");
scanf("%d", &firstNumber);
printf("Enter second value: ");
scanf("%d", &secondNumber);

if(firstNumber >= secondNumber)
    result = firstNumber - secondNumber;
else if(secondNumber > firstNumber)
     result = secondNumber + firstNumber;

printf("Result: %d\n", result);



system("pause");
return result;
}

ファイルを作成:

##########H
PROJECT = Homework1
##################

CC   = gcc

# win 32
#RM = del

#linux
RM = rm -f

BIN  = $(PROJECT).exe
OBJ  = $(PROJECT).o  


all:    $(BIN)

clean:
${RM} $(OBJ) $(BIN) $(PROJECT).s

$(BIN): $(OBJ)
$(CC) $(OBJ) -o $(PROJECT).exe 

$(OBJ): $(PROJECT).s
$(CC) -c $(PROJECT).s -o $(PROJECT).o 

$(PROJECT).s: $(PROJECT).c
$(CC) -c $(PROJECT).c -S  -masm=intel 

どんな助けでも大歓迎です。

4

1 に答える 1

0

メイクファイルがありますか? あなたが示す出力は、その仮定と一致していないようです。

make firstlab.c firstlabは少し奇妙です。と置き換えるだけでmake firstlab、同じ結果が得られます。オブジェクト ファイル タイプが必要な場合は、make firstlab.o.

makeその動作はすべての暗黙のルールに依存します。動作をより適切に制御するには、おそらくプロジェクトのメイクファイルを作成する必要があります。アセンブリ ファイル ( firstlab.s) の作成をサポートするには、とにかくそれを行う必要があります。次のようなルール:

%.s : %.c
   $(CC) $(CFLAGS) -S -o $@ $<

やるべきです。実行可能ファイルとオブジェクト ファイルに対して同様のルールを作成できます。始める前に、 GNU Make マニュアルをざっと見ることを強くお勧めします。

printfとのscanf警告を修正するに#include <stdio.h>は、プログラムの先頭に を追加します。

于 2013-01-29T21:31:43.173 に答える