Eclipse 3.5 Galileo + CDT + cygwinでCやC++のプログラムを作成する方法

このQ&Aのポイント
  • Eclipse 3.5 Galileo + CDT + cygwinを使用してCやC++のプログラムを作成する方法についての質問です。
  • ビルドが通らない問題に関して、Makefileやプロジェクトの設定に問題がある可能性があります。
  • cygwin上でmakeコマンドを実行するとビルドできるため、Makefileの設定を見直す必要があります。
回答を見る
  • ベストアンサー

Eclipse 3.5 Galileo + CDT + cygwinで

Eclipse 3.5 Galileo + CDT + cygwinで、CやC++のプログラムを作りたいと考えています。 しかし、ビルドが通らず、困っています。 行った作業手順は、以下の通りです。 (1)まず、下記サイトを参考に、簡単なCプログラムを作りました。  http://www.c.csce.kyushu-u.ac.jp/~seiichirou/wiki/index.php?Makefile%A4%CE%BD%F1%A4%AD%CA%FD  ----以下、作成したプログラム----  /* hello.c */  #include <stdio.h>  void edajima(void);  int main(int argc, char* argv[]) {   edajima();   return 0;  }  /* edajima.c */  #include <stdio.h>  void edajima(void);  void edajima(void) {   printf("わしが男塾塾長 江田島平八である!!\r\n");  }  ----プログラムここまで---- (2)そして、Makefileを以下のように作成しました。  ----以下、Makefile----  # Makefile  CC = gcc  CXXFLAGS = -O2 -g -Wall -fmessage-length=0  OBJS = edajima.o hello.o  LIBS =  TARGET = hello.exe  $(TARGET): $(OBJS)   $(CC) -o $(TARGET) $(OBJS) $(LIBS)  all: $(TARGET)  hello.o: hello.c   $(CC) -c hello.c  edajima.o: edajima.c   $(CC) -c edajima.c  clean:   rm -f $(OBJS) $(TARGET)  ----Makefileここまで---- (3)次に、EclipseでCのMakefileプロジェクトの作成をしました。   ロケーションは、上記ソースやMakefileがあるディレクトリを指定しました。 (4)Eclipseのプロジェクトエクスプローラで、Makefileを右クリックし、[Makeターゲット]-[作成]   でMakeターゲットを作成しました。 (5)Makefileを右クリックし、[Makeターゲット]-[ビルド]を実行すると、下記エラーが出て、   ビルドに失敗しました。  make hello  gcc -c hello.c  gcc hello.o -o hello  hello.o:hello.c:(.text+0x17): undefined reference to `_edajima'  collect2: ld returned 1 exit status  make: *** [hello] Error 1 どうやら、edajima.cがコンパイルされていない様です。 cygwin上でmakeコマンドを実行すると、ビルドできるので、Makefileは間違っていないと思っているのですが・・・。 どなたか、分かる方、ご教授願います。

質問者が選んだベストアンサー

  • ベストアンサー
  • Yanch
  • ベストアンサー率50% (114/225)
回答No.2

手前でも、試してみました。 手前では、特に問題なく、ビルドも実行も出来ましたが、 ビルド時のメッセージに違いがあるみたいです。 make all gcc -c edajima.c gcc -c hello.c gcc -o hello.exe edajima.o hello.o と言う風なビルド時のメッセージでした。 ので、もしかすると、 > (4)Eclipseのプロジェクトエクスプローラで、Makefileを右クリックし、[Makeターゲット]-[作成] >   でMakeターゲットを作成しました。 作成するべきMakeターゲットは「all」であるはずなんですが、 「hello」とかを作っちゃったのではないですか?

yossy_sas2000
質問者

お礼

ありがとうございます。 その通りでした。helloをターゲットにしていました。 allにしたら、コンパイルは通ったのですが、 「必要なプロジェクトにエラーがあります。起動しますか?」と聞かれ、 「はい」を押すと、無事に実行されるみたですが、「問題」のビューに 「make; ***No rule to make target `all'」と表示されます。 何ででしょう?

その他の回答 (2)

  • Yanch
  • ベストアンサー率50% (114/225)
回答No.3

> 「make; ***No rule to make target `all'」と表示されます。 > 何ででしょう? make ターゲット「all」のルールが無いと言っているみたいです。 Makefile を編集したんじゃないですか?

yossy_sas2000
質問者

お礼

すいません、自己解決しました。 プロジェクトのプロパティーの[C/C++ビルド]-[ビルダー設定]でビルド・ディレクトリーをMakefileがある場所に設定したら、エラーが出なくなりました。 ありがとうございました。

yossy_sas2000
質問者

補足

ありがとうございます。 Makefileは、変更していないんですよね・・・・。 一旦、cleanを実行して、allを実行すると、エラーが無く、コンパイルは通るんです。 all実行時のコンソールの内容は、下記のようになります。 ---------------------------- make all g++ -c edajima.c g++ -c hello.c g++ -o hello.exe edajima.o hello.o ---------------------------- その後、Eclipseの実行を押すと、 「必要なプロジェクトにエラーがあります。起動しますか?」と表示されます。 この時のコンソールの内容は、下記のようになります。 ---------------------------- make all make: *** No rule to make target `all'. Stop. ---------------------------- なぜか、実行時に再度make allされて、失敗している様です。 [プロジェクト]-[自動的にビルド]のチェックは外しているんですが・・・。

回答No.1

hello.cにある > void edajima(void); を extern void edajima(void); に変えてみてください。 同じファイルの中に無いものはexternで外部参照を宣言しておく必要があります。

yossy_sas2000
質問者

補足

ありがとうございます。 extern void edajima(void); に変えましたが、結果は同じでした。 gcc -c hello.c の後に gcc hello.o -o hello となってしまい、 gcc -c edajima.c の処理が走らないのは、なぜでしょうか?

関連するQ&A

  • eclipse3.3 CDTビルド環境

    WindowsXPのeclipse3.3EEにCDTをインストールしてCygwin/bccのビルド環境構築を試みています。 C/C++パースペクティブからファイル→新規→Cプロジェクト→実行可能で空のプロジェクトを作成してhelloworld.cとgygwin/bash上で実際にビルドできたMakefileを入れ、プロジェクト名右クリック - [プロジェクトのビルド] を実行したのですが、自作したMakefileは使用されずeclipseが自動生成したMakeが実行されます。 また、ファイル→新規→Cプロジェクト→実行可能からMakefileプロジェクトHello World C++を選択してプロジェクトを作成しビルドすると以下のようなエラーが出ます。 (ビルドエラー) **** プロジェクト hello01 の構成 Cygwin GCC の ビルド **** (Exec error:?w?????t?@?C?) Eclipse3.3EE CDTで自作Makefileビルドできる環境を構築する方法をご教示ください。 よろしくお願いします。

  • C言語のmakefileについて

    C言語のmakefileについて質問です。 例えば下記makefileでは、“CC”というマクロを“gcc”という文字列で再定義しています。 しかし中には(1)『CC = gcc』という定義なしでいきなり(2)『$(CC) -o hello $(objs)』 でコンパイルしているmakefileを見るのですが、その場合(2)は何でコンパイルされているのでしょうか。($(CC)の中身はCC??GCC?ACC??) ※下記ターゲット名等はサンプルです。 ------------------ # Makefile objs = hello.o edajima.o CC = gcc hello: $(objs) $(CC) -o hello $(objs) .PHONY: clean clean: $(RM) hello $(objs)

  • Eclipse CDT MinGWによるC言語

    EclipseでC言語の開発環境を整えたいと思い、CDTをインストールし、コンパイラにはMinGWをインストールしました。CDT、MinGWは正常にインストールでき、MinGWはPATHに設定済みです。 Eclipse上でCプロジェクト"sampelC"を作成し、ソースファイル"sample"を作成しました。 以下sampleコードです。 #include<stdio.h> int main(void) { printf("Hello World"); return 0; } Eclipse上で実行するとコンソールに Info: Internal Builder is used for build gcc -O0 -g3 -Wall -c -fmessage-length=0 -o sample.o "..\\sample.c" gcc -o sampleC.exe sample.o 20:16:04 Build Finished (took 151ms) と表示され、ダイアログに 'sampleCデバックの起動'に問題が発生しました。プロセス開始中のエラー -詳細- プロセス開始中のエラー。 プログラム "D:\workspace\sampleC\sample.c" を実行できません: 起動失敗 プログラム "D:\workspace\sampleC\sample.c" を実行できません: 起動失敗 プログラム "D:\workspace\sampleC\sample.c" を実行できません: 起動失敗 と表示されます。 しかしながら、生成されたsample.exeをコマンドプロンプトで実行すると正しく起動します。 よってコンパイルは正常にできているということだと思います。 Eclipse上で実行する方法のご教授をお願いします。

  • Makefileについて

    makeファイルの書き方で悩んでいます。 makeファイルは書いたことがなく、ほとんど丸写しです。 私がしたいのは、 (1)run:部分で削除するファイルがなかった場合、エラーとなり次の行へ進みません。なくても(エラーでも/エラー回避して)次の行へ進む方法が知りたいです。 もうひとつは(2)run:部分で、cleanを実行し、makeしてrunを実行させる方法が知りたいです。 --------------以下、サンプルMakefileです。 CC = gcc OBJS = main.o sub.o PROG = test.exe .c.o: $(CC) -c $< -o $@ $(PROG) : $(OBJS) $(CC) $(OBJS) -o $(PROG) $(OBJS) : Makefile clean: rm -f *.o $(PROG) run: rm *.log <---- (1)ここでファイルがないとエラーで止まる $(PROG) all:   <-- (2)[clean]を実行して、makeして、[run]を実行させたい 以上です。

  • MacでEclipse+CDT

    MacでC/C++の勉強をしようと思い、Eclipse+CDTを試みたのですが、ビルドしてもバイナリファイルが作られません。どうすればよいのでしょうか。教えてください。 OSは10.2.8、Eclipseは3.0.2、CDTは2.0.2です。 コンソールには以下の様にでています。 make -k all main.d:5: *** missing separator. Stop. Build complete for project HelloWorld

  • eclipseのCDTでCを書いていますがエラーです

     今晩はCの初心者です、宜しくお願いします。  eclipseのCDTでCを書いています。  PATHも設定して、JAVAはコンパイルするのですが、Cだけは下のようなエラーが出てうまくコンパイルできません。  一体何が原因でしょう。   ============================================================ **** Full rebuild of configuration Debug for project try1 **** make -k clean all make: makefile 5: bad delimiter: '=' Build complete for project try1 =============================================================

  • EclipseでC言語のプログラムが実行できない

    EclipseでC言語のプログラムが実行できない Cygwinはすでにインストールしてあったのでそのままコンパイルもできました。Ctrl+BでBuildするとコンソールに以下のメッセージがでました。実行しようとしているファイルの名前はKnowledge.cです。 **** Build of configuration Debug for project Knowledge **** make all Building file: ../src/Knowledge.c Invoking: Cygwin C Compiler gcc -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"src/Knowledge.d" -MT"src/Knowledge.d" -o"src/Knowledge.o" "../src/Knowledge.c" Finished building: ../src/Knowledge.c Building target: Knowledge.exe Invoking: Cygwin C Linker gcc -o"Knowledge.exe" ./src/Knowledge.o Finished building target: Knowledge.exe そしてRun > Run Configurationで新しいConfigurationを作りました。 Configurationを作った画面では ProjectはKnowledge Build ConfigurationはDebug C/C++ ApplicationはDebug\Knowledge.exe となっています。 Build Configurationの欄は他にUse Active, Releaseに選択できるようになっています。 このあとRunを押してもコンソールには何も表示されません。Knowledge.cはEclipseが作成してくれたHello Worldプログラムです。なぜでしょうか?

  • Makefile作成時の拡張子.oとは?

    main2.o: main.c gcc -o main2.o -c main.c hello2.o: hello.c gcc -o hello2.o -c hello.c test2: main2.o hello2.o gcc -o test2 main2.o hello2.o のようなMakefile作成時の拡張子.oとは何のファイルという意味なのでしょうか? Makefile作成初心者なのでご教授お願いいたします。

  • gfortranでmakefile

    gfortranのmakefileを作成し、"make test"と実行しても成功しません。 どうすればいいのでしょうか? どこか間違いがあるでしょうか? 下にmakefileを全文載せましたのでアドバイスをよろしくお願いします。 OBJS = main.o tree.o treef.o test : ${OBJS} gfortran -c test ${OBJS} main.fやtree.fやtreef.fのファイルの中身は問題ありません。 他のパソコンではキチンとコンパイルに成功しています。 ちなみに、"make test"と実行して出てくるエラーメッセージが「makefile:3 *** 最初のターゲットより前にコマンドを起動. 中止.」 です。

  • win版インテルコンパイラnmakeについて

    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: 特殊マクロは定義されていません : '$<' です。 {}の括弧を()に修正したのも似たエラーが発生したからなのですが、 コマンドプロンプトだと特殊マクロは使えないのでしょうか?

専門家に質問してみよう