如何制作一个可以同时编译C,C和Java文件的makefile
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了如何制作一个可以同时编译C,C和Java文件的makefile,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1694字,纯文字阅读大概需要3分钟。
内容图文
![如何制作一个可以同时编译C,C和Java文件的makefile](/upload/InfoBanner/zyjiaocheng/655/534e9d58598c4af1a68eba961a3ea5f6.jpg)
我正在尝试创建一个Makefile,它将同时编译和运行markov算法的3种不同实现.我是makefile的新手,所以如果有多个错误,请告诉我.另外,如果我想使用-O3优化编译,该在哪里做?
当我运行时,当前出现以下错误:
Makefile:28: warning: overriding commands for target `markov.o’
Makefile:22: warning: ignoring old commands for target `markov.o’
make: * No rule to make target
Markov.java', needed by
java_markov.class’. Stop.
这是我的makefile的代码:
javaC=javac
javaR=java
CC=g++
CC=gcc
CFLAGS=-O0
OPT=-deprecation
TARGET1=./java_markov
TARGET2=./markov_cpp
TARGET3=./markov_c
INFILE=./alice30.txt
OUTFILE1=./markov_java_out.txt
OUTFILE2=./output/markov_cpp_out.txt
OUTFILE3=./output/markov_c_out.txt
$(TARGET1).class: Markov.java
$(javaC) Markov.java
$(TARGET2): markov.o
$(CC) $(CFLAGS) -o $(TARGET2) markov.o
markov.o: markov.cpp
$(CC) $(CFLAGS) -c markov.cpp
$(TARGET3) : markov.o eprintf.o
$(CC) $(CFLAGS) -o $(TARGET3) markov.o eprintf.o
markov.o : markov.c
$(CC) $(CFLAGS) -c markov.c
eprintf.o : eprintf.c eprintf.h
$(CC) $(CFLAGS) -c eprintf.c
clean:
rm -f *.class $(OUTFILE1)
rm -f *.o $(TARGET2) $(OUTFILE2)
rm -f *.o $(TARGET3) $(OUTFILE3)
run: $(TARGET1).class
$(javaR) $(TARGET1) < $(INFILE) > $(OUTFILE1)
$(TARGET2)
$(TARGET2) <$(INFILE) >$(OUTFILE2)
$(TARGET3)
$(TARGET3) < $(INFILE) > $(OUTFILE3)
解决方法:
>您确实有两个规则来制作markov.o.如果您确实在同一文件夹中有C和C端口,请尝试重命名其中之一:
markov-c++.o: markov.cpp
$(TARGET2): markov-c++.o …
>如果您不再链接.o文件,则实际上不必对中间.o文件使用两步编译.你可以做
$(TARGET2): markov.cpp
$(CC) $(CFLAGS) markov.cpp -o $(TARGET2)
>另一个警告表明目录中没有名为Markov.java的文件.它可能在子目录中还是其他内容中?
> make run非常糟糕:-)我想您只是想将所有三个目标都放在前提条件行上?
内容总结
以上是互联网集市为您收集整理的如何制作一个可以同时编译C,C和Java文件的makefile全部内容,希望文章能够帮你解决如何制作一个可以同时编译C,C和Java文件的makefile所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。