我正在尝试创建一个makefile,它使用来自不同目录中的txt文件的输入执行。我的描述是这样的:
project/misc/input.txt
project/programms/findlines.c到目前为止,我的makefile是这样的:
# #Paths to input files
words-10= ../../misc/words
#compiler used
CC = gcc
#Files .o
OBJS = find_lines.o words-10
#Executable programm
EXEC = find_lines
#Parameters
ARGS =
$(EXEC): $(OBJS)
$(CC) $(OBJS) -o $(EXEC) $(LDFLAGS)
clean:
rm -f $(OBJS) $(EXEC)
run:
time ./find_lines < words-10
valgrind:
valgrind ./find_lines < words-10似乎编译器找不到输入文件,并预测错误“没有这样的文件存在”。
发布于 2020-04-01 00:03:55
words-10的变量替换应该与makefile中的其他变量(如CC、OBJS和EXEC)相同:您需要用$(words-10)或${words-10}替换对words-10的引用。
此外,您可能不希望它包含在OBJS中,因为它看起来不像是您想要传递给gcc进行链接的文件。
# #Paths to input files
words-10= ../../misc/words
#compiler used
CC = gcc
#Files .o
OBJS = find_lines.o
#Executable programm
EXEC = find_lines
#Parameters
ARGS =
$(EXEC): $(OBJS)
$(CC) $(OBJS) -o $(EXEC) $(LDFLAGS)
clean:
rm -f $(OBJS) $(EXEC)
run:
time ./find_lines < $(words-10)
valgrind:
valgrind ./find_lines < $(words-10)发布于 2020-04-01 02:20:40
编辑:这是最终的解决方案,感谢大家的帮助!
fileswords-10 = ../../misc/words #输入路径
CC = gcc #使用的编译器
OBJS = find_lines.o #文件.o
EXEC = find_lines #可执行程序
ARGS =$(Words10)/Words10#参数
$(EXEC):$(OBJS) $(CC) $(OBJS) -o $(EXEC)
清理: rm -f $(OBJS) $(EXEC)
运行:time./$(EXEC)< $(ARGS)
valgrind: valgrind ./find_line< $(ARGS)
https://stackoverflow.com/questions/60954559
复制相似问题