首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何一次编译C、C++和Java文件的makefile

如何一次编译C、C++和Java文件的makefile
EN

Stack Overflow用户
提问于 2011-12-08 22:42:12
回答 1查看 1.9K关注 0票数 3

我正在尝试创建一个Makefile,它将同时编译和运行3种不同的markov算法实现。我是新手,所以如果有多个错误,请告诉我。而且,如果我想用-O3优化编译,我会在哪里这样做呢?

当我运行时,我目前得到以下错误:

Makefile:28:警告:重写目标markov.o' Makefile:22: warning: ignoring old commands for target的命令

make:*没有规则可以使目标Markov.java', needed byjava_markov.class‘。停止播放。

下面是我的makefile的代码:

代码语言:javascript
复制
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)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-12-08 22:50:59

  • ,您确实有两个规则来创建markov.o。尝试重命名其中一个,如果您确实在同一个文件夹中有C和C++端口:。

马尔可夫-c++.o: markov.cpp $(TARGET2):markov-c++.o…

  • ,如果您没有在.o文件中链接,那么您实际上不必在中间的.o文件中使用2步编译。

$(TARGET2):markov.cpp $(CC) $(CFLAGS) markov.cpp -o $(TARGET2)

  • ,另一个警告表示目录中没有名为Markov.java的文件。它可能在子目录中,或者something?

  • make run非常坏:-)我认为您只是想将所有三个目标放在先决条件行上?
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8438748

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档