Linux:.c 和 Makefile "How to create the .s and .o file so that I can use "make“在终端中?”

标签 linux ubuntu makefile

好吧,我假设这是一个简单的问题。我有一个 .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 Manual开始吧。

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

关于Linux:.c 和 Makefile "How to create the .s and .o file so that I can use "make“在终端中?”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14592553/

相关文章:

postgresql - 如何在 Ubuntu 上的 PostgreSQL 中计算每个查询的 IOPS

unix - 如何在 ubuntu 中从 root 设置 cron?

linux - 如何将所有 R 包从 super 用户重新安装到用户?

linux - 基于 OBS 的切诺基构建

java - 使用 ANT、Javacc、JUnit 和编译 Java 类加快 Linux 构建时间的技巧

linux - 从 Google Compute Engine 连接到 FTP 服务器时,获取 "I won' t open a connection to”

c - Makefile 中类似命令的简化

c++ - MinGW - 制作 : cc: Command not found

c - 使文件成为多个可执行文件

linux - 将 Linux 服务器配置为 Web 服务器