为C程序创建一个makefile

时间:2015-11-28 03:01:45

标签: c makefile

有人可以帮我为这个程序创建一个makefile吗?我已尝试过一个,但它不起作用......谢谢!

#include <string.h>
#include <stdlib.h>
#include "MakeArg.c"

int main()   
{   
char cmdline[256];   
char **argv;   

printf("doit# ");   

for (;;)   
{      
    scanf("%s",cmdline);   
    if (strcmp(cmdline,"q")==0)   
        break;   
    else   
    {   
        printf("doit# ");    
        if (fork()==0)   
        {   
            if (MakeArg(cmdline," ",&argv)>0)   
                execvp(argv[0],argv);   
        }   
        wait(NULL);   
    }   
 }   
 exit(0);   
}   

这是我现在所拥有的,但它不起作用:

CC         = gcc 
CFLAGS     = ­-c -­Wall -­ansi ­-pedantic 
SOURCES    = MakeArg.c doit.c 
OBJECTS    = $(SOURCES:.c=.o)  
EXECUTABLE = doit
all: $(EXECUTABLE) 
$(EXECUTABLE): $(OBJECTS) 
$(CC) -­o $@ $(OBJECTS) 
%.o: %.c $(HEADER) 
$(CC) $(CFLAGS) -­o $@ $< 
clean: 
rm ­f *.o $(EXECUTABLE)

1 个答案:

答案 0 :(得分:2)

只是一些错误:

1)您还需要在已发布的文件中包含以下标题:

#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>

2)在你的makefile中的干净目标中,你错过了'f'前面的' - '。应该是rm -f。

3)另外,请确保在Makefile中的每个配方之前有一个制表符(而不是空格)。 很难说你是否从帖子中做过(或没做过)。

4)此外,建议不要包含.c文件。

尝试这样的事情:

CC         = gcc
CFLAGS     = ­-­Wall -­ansi ­-pedantic 
SOURCES    = MakeArg.c doit.c
OBJECTS    = $(SOURCES:.c=.o)  
EXECUTABLE = doit

all: $(EXECUTABLE) 

$(EXECUTABLE): $(OBJECTS) 
    $(CC) -o $@ $^

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

clean: 
    $(RM) ­-f $(OBJECTS) $(EXECUTABLE)

//

#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>

#include "MakeArg.h"

int main()   
{   
char cmdline[256];   
char **argv;   

printf("doit# ");   

for (;;)   
{      
    scanf("%s",cmdline);   
    if (strcmp(cmdline,"q")==0)   
        break;   
    else   
    {   
        printf("doit# ");    
        if (fork()==0)   
        {   
            if (MakeArg(cmdline," ",&argv)>0)   
                execvp(argv[0],argv);   
        }   
        wait(NULL);   
    }   
 }   
 exit(0);   
}