Cで作っていたプログラムをC++に変えてみたところ、
Makefileでmakeするときに、g++でコンパイルしたのにccになってしまった。
結論から言うと、main.c -> main.cpp に変えたのは良いのだが、
main.cを残しておくとエラーを起こすようだ。
今回の経過は次のとおりである。
main.cでインクルードしていたfunc.hでcppの関数を使いたかったので、
main.cとfunc.cをmain.cppにfunc.cppに変えた。
main.cとmain.cppは同じ内容である。
func.hには
こんなMakefileを作ってmakeしてみた。
# Makefile
# ターゲット(プログラム)名とオブジェクトファイル名
target = a.exe
srcs = main.cpp
objs = $(srcs:%.cpp=%.o)
# 定義済みマクロの再定義
CXX = g++
CXXFLAGS = -g -Wall
# サフィックスルールの適応対象の拡張子の定義
.SUFFIXES: .cpp .o
# プライマリターゲット
$(target): $(objs)
$(CXX) -o $@ $^
# サフィックスルール
.cpp.o:
$(CXX) -c $<
# ファイル削除用ターゲット
.PHONY: clean
clean:
$(RM) $(target) $(objs)
# ターゲット(プログラム)名とオブジェクトファイル名
target = a.exe
srcs = main.cpp
objs = $(srcs:%.cpp=%.o)
# 定義済みマクロの再定義
CXX = g++
CXXFLAGS = -g -Wall
# サフィックスルールの適応対象の拡張子の定義
.SUFFIXES: .cpp .o
# プライマリターゲット
$(target): $(objs)
$(CXX) -o $@ $^
# サフィックスルール
.cpp.o:
$(CXX) -c $<
# ファイル削除用ターゲット
.PHONY: clean
clean:
$(RM) $(target) $(objs)
すると、次のエラー。
$ make
cc -c -o main.o main.c
In file included from main.c:3:
func.h:7:20: error: iostream: No such file or directory
make: *** [main.o] Error 1
cc -c -o main.o main.c
In file included from main.c:3:
func.h:7:20: error: iostream: No such file or directory
make: *** [main.o] Error 1
念のためターミナルに直接コマンドを打つとエラーは起きない。
$ g++ -o a.exe main.cpp
$
$
エラーをよく見てみると、
コンパイラを$(CXX)に指定しているのに、ccでコンパイルしている。
ちなみに、CXXの中身はg++である。
さらに、よく見てみると!?main.oの後がmain.cになっている。
makeでコンパイルされたのは、main.cppではなく、main.cを自動的にccでコンパイルしていることが分かった。
main.cを削除してmakeしたら無事成功した。
0 件のコメント:
コメントを投稿