※ ChatGPTを利用し、要約された質問です(原文:win版インテルコンパイラnmakeについて)
Windows版インテルコンパイラ(icl)でのmakefile書き換え
このQ&Aのポイント
Win版インテルコンパイラ(icl)を使用するためのmakefile書き換え方法について
makefileの書き換えにより、Windowsでのインテルコンパイラ(icl)の利用ができなくなってしまった場合のエラーメッセージについて
コマンドプロンプトで特殊マクロを使用できない場合の対処方法について
linux版インテルコンパイラ(icc)を使っているmakefileをwindows版インテルコンパイラ(icl)で使えるように書きかえているのですが、コマンドプロンプトでどうもnmakeがうまくいきません。
元のmakefileは、
CC = icc
CFLAGS = -O3 -xSSE4.2
CFLAGS2 = $(CFLAGS) -openmp -openmp-report1
LIBS = -lm -liomp5
PROGRAM = foo.exe
SRCS = foo1.c foo2.c foo3.c
.c.o:
$(CC) $(CFLAGS) -c $<
.SUFFIXES: .c .o
all : $(PROGRAM)
$(PROGRAM) : ${OBJS}
$(CC) $(CFLAGS) -o $@ ${OBJS} $(LIBS)
foo1.o : foo1.c foo.h
foo2.o : foo2.c foo.h
$(CC) $(CFLAGS2) -c $<
foo3.o : foo3.c foo.h
clean:
rm *.o
rm $(PROGRAM)
で、書き換えたmakefileは、
CC = icl
CFLAGS = -O3 -QxSSE4.2
CFLAGS2 = $(CFLAGS) -Qopenmp
# CFLAGS = -W -O3
LIBS = -lm -liomp5
PROGRAM = foo.exe
SRCS = foo1.c foo2.c foo3.c
.c.o:
$(CC) $(CFLAGS) -c $<
.SUFFIXES: .c .o
all : $(PROGRAM)
$(PROGRAM) : ${OBJS}
$(CC) $(CFLAGS) -o $@ $(OBJS) $(LIBS)
foo1.o : foo1.c foo.h
foo2.o : foo2.c foo.h
$(CC) $(CFLAGS2) -c $<
foo3.o : foo3.c foo.h
clean:
rm *.o
rm $(PROGRAM)
です。(投稿の際に見づらかったためスペースや改行はいじってます)
CFLAGS2の-openmpを-Qopenmpにしたのと
$(PROGRAM)の行の${OBJS}を$(OBJS)にしたぐらいですがエラーが発生します。({}括弧を使っているとエラーが発生したため)
エラーメッセージは
NMAKE : warning U4006: 特殊マクロは定義されていません : '$<'
です。
{}の括弧を()に修正したのも似たエラーが発生したからなのですが、
コマンドプロンプトだと特殊マクロは使えないのでしょうか?
お礼
nmakeの仕様を確認しましたが解決には至りませんでした。 ですがインテルコンパイラはnmakeを使う必要があると勘違いしていたこともあり、GNUのmakeを使うと無事コンパイルができました。 またmakeには様々な方言があるという情報はすごいためになりました。 前回、今回と回答ありがとうございました。