繁体   English   中英

Linux:.c和Makefile“如何创建.s和.o文件,以便可以在终端中使用” make”?”

[英]Linux: .c and Makefile “How to create the .s and .o file so that I can use ”make“ in terminal?”

好的,我假设这是一个简单的问题。 我有一个.c文件和一个Makefile文件。 如果重要的话,我正在使用Linux 12.10 ubuntu。 我试图了解如何在终端中编写代码以获取这两个文件,以在这两个文件利用make的目录中创建可执行文件,源文件和目标文件。 我已经安装了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 

任何帮助表示赞赏。

您确定您有一个makefile? 您显示的输出似乎与该假设不符。

make firstlab.c firstlab 您可以将其替换为make firstlab ,结果将相同。 如果要使用对象文件类型,请make firstlab.o

所有这些行为都取决于make的隐式规则。 您可能应该为项目编写一个makefile,以更好地控制行为。 为了支持创建程序集文件( firstlab.s ),您仍然必须这样做。 规则如下:

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

应该做。 您可以为可执行文件和目标文件制定相似的规则。 我强烈建议您快速浏览一下《 GNU Make手册》以开始使用。

要修复printfscanf警告,请在程序顶部添加#include <stdio.h>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM