FC2ブログ

Ubuntu 12.10でEclipse-CDT環境整備

Windows版のEclipse-CDTはLinux Toolの一部しか動作しないらしいこともあり、いよいよLinux上にEclipseでC/C++開発環境(Eclipse-CDT)を構築したメモ。予想以上にEclipseはWindowsとLinuxで同じ動作が実現されており、改めてJavaの偉大さ(write once, run anywhere)に感激。

【環境】
●ホストOS:Windows 8(64bit)
●仮想環境:VMWare Player 5.02(64bit)
●Linux:Ubuntu 12.10(64bit)
●Java:Oracle Java 7 SDK
●Eclipse Juno (4.2)
・Eclipse IDE for C/C++ Developers(Linux 64ビット版)
・Eclipse プラグイン日本語化プラグイン:Pleiades 1.4.0

【実施したこと、参考にさせて頂いたURL】
●Oracle Java 7 SDK
UbuntuのソフトウェアセンタからインストールできるのはOpen JDKみたいだが、Oracle(Sun)提供のJava 7の方が安定しているらしいので、下記のコマンドでインストール

$ sudo add-apt-repository ppa:webupd8team/java
$ sudo apt-get update
$ sudo apt-get install oracle-java7-installer

Ubuntu: Javaプラグイン、javawsの不具合(Oracle JDKを導入)

●Eclipse-CDT Juno
Ubuntu12.10のソフトウェアセンタを使うと保守バージョンのEclipse 3.8がインストールされるようなので、Juno(4.2)をインストールして、Unityにも登録。日本語化は、Pleiades 1.4.0 をWindows版同様に、MergeDocとして、dropinsに登録する。

Linux で Eclipse 4.2 のダウンロード,インストール,設定,日本語化,基本操作
Ubuntu Unity の Launcher で Eclipse のアイコンをちゃんと表示する
Eclipse プラグイン日本語化プラグイン:Pleiades 1.4.0

●Google Test
無理やりMinGW上に環境構築を実施したWindows版と若干異なり、

$ ./configure
$ make

でビルド後に、make installが失敗するのでREADMEにしたがって下記を実施

$ ln -s DIR/.lib/libgtest.a DIR/lib
$ ln -s DIR/.lib/libgtest_main.a DIR/lib
Makefileに-LDIRと-lgtestを追加

●Doxygenインストール
$ sudo apt-get install doxygen

Windows版Eclipse-CDT環境同様の設定を実施
・C/C++ Unit
 単体テスト実施時に標準出力する場合は最後に改行を追加
・Google Testによるカバレッジ表示
・Doxygen用ecloxプラグインインストール

Eclipse-CDTでC/C++開発環境整備

新しく購入したWindows 8マシン(64ビット)はメモリ:8GB、CPU:Core-i7 3770と、そこそこ速いはずなので、以前のマシンでは動作が重かったEclipse-CDT(Juno:Eclipse 4.2)でC/C++環境を構築した時のメモ。以前Eclipse-CDTを使った時より、色んなことができるみたい。軽量なEmacsと併用して、サクサク開発を実現できそうかも(?)

【環境】
●Windows 8(64bit)
●MinGW(32ビット)
●Google Test 1.6.0(C++)
Eclipse Juno (4.2)
・Eclipse IDE for C/C++ Developers(Windows64ビット版)
Eclipse プラグイン日本語化プラグイン:Pleiades 1.4.0

C/C++開発環境としてEclipse-CDTの便利なところ(Java開発環境のJDT相当機能が利用可能)
・リファクタリング:関数名等の変更時に、関連する箇所も含めた一括変更が可能
・入力アシスト:ctrl-Spaceにより候補を表示可能
・強力な検索、ブラウジング
・gdbより操作が簡単な強力なソースコードデバッガ
・Google Test等の単体テスト環境
・gitに対応した構成管理Egitを標準装備
・UMLツールプラグインとの連携が可能
・Linux場合はコールグラフ、トレース等の更に強力なLinux Toolsが利用可能


【実施したこと、参考にさせて頂いたURL】
●既存Makefileとの連携
以下を実施して、既存のMakefileをEclipseのプロジェクトとしてインポート。「自動的にMakefileを生成」をOffにすることで、既存のMakefileをそのまま利用可能。

・ インポート→Existing Code as Makefile Project→C/C++ビルド→ツール・チェーン・エディタ
→現在のビルダ:Gnu Make ビルダ
→C/C++ビルド→「自動的にMakefileを生成」をOFF

●DoxygenによるAPIドキュメント自動生成
定番のDoxygenがecloxプラグインでEclipseより簡単に利用できる
ecloxとdoxygenで仕様書メンテナンスの効率をUP!

●Google Testによるカバレッジ表示
・標準でgcoveditが入っている。カバレッジを表示するためには、コンパイルオプションに「-fprofile-arcs -ftest-coverage」を追加。
・カバレッジ結果をソースコードで表示するためには、「C/C++一般→パスおよびシンボル→ソース・ロケーション」にカバレッジ結果をソースコードで表示したいディレクトリを追加する必要がある模様。

- Eclipse CDTで gcovの結果を見てみる

●C/C++ Unitでの単体テスト
標準でインストールされているUnitテストサポートプラグインは、Google Testの標準出力への出力結果を元にFAILの判断を実施するみたいで、テストプログラムの途中で文字列出力があるとparse error発生する場合があり。このような場合は、文字列出力の最後で、printf("XXX\n")のように改行を実施することで解決された(結構はまりました)。

Tutorial: How to try C/C++ Tests Runner for Eclipse CDT

MinGWとMakefileでC/C++開発環境整備

最近はPythonばかりだったが、C/C++開発用に超久しぶりにMinGW環境でMakefileを作成した時のメモ(もっとエレガントな方法が絶対ありそうなものだが、間違っていたらごめんなさい)。

【環境】
●Windows 8(64bit)
●Emacs 24.2
●MinGW(32ビット)
●Google Test 1.6.0(C++)

【参考にさせて頂いた主なURL】
Makefile の書き方 (C 言語)
Makeでヘッダファイルの依存関係に対応する
Google Testのサンプルプログラム

【Makefileで実現したいこと】
●C/C++混在にできるだけ対応
・C++ファイルの拡張子はcppを想定
●部品(モジュール)毎の複数ディレクトリ構成の対応
・make --no-print-directory -C モジュールdir を使って多段Makefileで実現
●ヘッダファイルの依存関係による自動コンパイル(makedepend相当)
・gcc/g++の-MMD, -MPオプションで依存関係ファイルを作成
●単体テスト対応(Google Test 1.6相当)
・testターゲットでGoogle Test(C++)用ビルドの実現
・カバレッジ計測対応(gcov相当)
●Eclipse-CDTでも簡単に対応できること
・Eclipse-CDT(C/C++開発用Eclipse)では、既存のMakefileをそのままインポートして実行できるらしい
・MinGWに標準で入っているgcovによるカバレッジ結果をlcovで表示したいが、Windows環境では結構環境構築が大変そうなので、代わりにEclipse-CDTでカバレッジを表示することとする

【ディレクトリ構成】
プロジェクトdir
  Makefile:トップディレクトリ用Makefile
Makefile.com:共通設定
mod1
Makefile:モジュール用Makefile
Makefile.in:モジュール用設定
test
Makefile:単体テスト用Makefile(Google Test)
Makefile.test:単体テスト用設定

【トップディレクトリ用Makefile】
# ターゲット定義
SUB_DIRS = \
mod1
TEST_DIRS = \
test
PROG = a_out.exe
CC_SRCS = $(shell find $(SUB_DIRS) -name "*.c")
CXX_SRCS = $(shell find $(SUB_DIRS) -name "*.cpp")

-include Makefile.com

help:
@echo "=== make usage ==="
@echo " make all: compile and link"
@echo " make clean: clean objects, executable and depends file "
@echo " make comp: compile"
@echo " make run: run executable"
@echo " make test: execute unit test"

all: comp $(PROG)

comp:
@for dir in $(SUB_DIRS); do \
$(MAKE) comp -C $$dir || exit 1;\
done

clean:
rm -f $(PROG)
@for dir in $(SUB_DIRS); do \
$(MAKE) clean -C $$dir;\
done
@for dir in $(TEST_DIRS); do \
$(MAKE) clean -C $$dir;\
done

run:
./$(PROG)

test: comp
@for dir in $(TEST_DIRS); do \
$(MAKE) all -C $$dir || exit 1;\
$(MAKE) run -C $$dir || exit 1;\
done

$(PROG): $(OBJS)
$(LD) $(LDFLAGS) -o $@ $^ $(LIBS)

.PHONY : help all comp clean test run

【共通設定Makefile.com】
# コマンド定義
CC = gcc
CXX = g++
LD = gcc
MAKE = make --no-print-directory

# 設定
CFLAGS = -Wall -g -O0 -fprofile-arcs -ftest-coverage
CXXFLAGS = -Wall -g -O0 -fprofile-arcs -ftest-coverage
LDFLAGS =
INCLUDES = -I. -I/include -I../include
LIBS = -lpthread -lgcov

# ターゲットファイル定義(CC_SRCS, CXX_SRCSでソースファイルを定義しておくこと)
CC_OBJS := $(CC_SRCS:%.c=%.o)
CC_DEPS := $(CC_SRCS:%.c=%.d)
CXX_OBJS := $(CXX_SRCS:%.cpp=%.o)
CXX_DEPS := $(CXX_SRCS:%.cpp=%.d)
OBJS = $(CC_OBJS) $(CXX_OBJS)
DEPS = $(CC_DEPS) $(CXX_DEPS)

.SUFFIXES: .c .cpp .o .d

【モジュール用Makefile】
-include Makefile.in

help:
@echo "=== make usage ==="
@echo " make all: compile and link"
@echo " make clean: clean objects, executable and depends file "
@echo " make comp: compile"
@echo " make run: run executable"

all: $(PROG)

clean:
rm -f $(PROG) $(OBJS) $(DEPS)
rm -f *.gcno *.gcda *.gcov

comp: $(OBJS)

run:
./$(PROG)

-include $(DEPS)

$(PROG): $(OBJS)
$(LD) $(LDFLAGS) -o $@ $^ $(LIBS)

.c.o:
$(CC) $(CFLAGS) $(INCLUDES) -c -MMD -MP $<

.cpp.o:
$(CXX) $(CXXFLAGS) $(INCLUDES) -c -MMD -MP $<

.PHONY : help comp all clean run

【モジュール用設定:Makefile.in】
# target definition
PROG =
CC_SRCS = hello_mod1.c
CXX_SRCS =

# include a common Makefile definition
-include ../Makefile.com

# module additional make option
CFLAGS +=
CXXFLAGS +=
INCLUDES +=
LDFLAGS +=
LIBS +=

# over write macro
#LD = g++

【テスト用Makefile】
-include Makefile.test

help:
@echo "=== make usage ==="
@echo " make comp: compile"
@echo " make all: compile and link"
@echo " make clean: clean objects, executable and depends file "

comp: $(OBJS)

all: $(PROG)

-include $(DEPS)

$(PROG): $(OBJS)
$(LD) $(LDFLAGS) -o $@ $^ $(TEST_OBJS) $(LIBS)

.c.o:
$(CC) $(CFLAGS) $(INCLUDES) -c -MMD -MP $<

.cpp.o:
$(CXX) $(CXXFLAGS) $(INCLUDES) -c -MMD -MP $<

clean:
rm -f $(PROG) $(OBJS) $(DEPS)
rm -f *.gcno *.gcda *.gcov

run:
./$(PROG)

.PHONY : help comp all clean run


【テスト用設定:Makefile.test】
# target definition
PROG = gtest.exe
CC_SRCS =
CXX_SRCS = test_mod1.cpp

# include a common Makefile definition
-include ../Makefile.com

# module additional make option
CFLAGS +=
CXXFLAGS +=
INCLUDES +=
LDFLAGS +=
LIBS += -lgtest

# over write macro(for C++)
LD = g++

# for Google Test(C++)
TEST_OBJS = ../mod1/hello_mod1.o

MinGW環境整備

Windows8のC/C++開発環境としてしていつも使用しているMinGWの環境(pthread、C/C++単体テストフレームワークのGoogle Test)を整備した。

【環境】
●Windows 8(64bit)
●Emacs 24.2
●MinGw(32bit):mingw-get-inst-20120426.exeをダウンロードしてインストール
 64ビット版はコンパイルが必要みたいなので、まずは32ビット版を使用中。

【実施したこと、参考にさせて頂いたURL】
●pthreadのインストール
下記のURLを参考にさせていただいて、MinGWにpthreadをインストール(lzmaで圧縮を7zipでの解凍が必要)

Windows用Pthreadインストール用メモ

●Emacsの動作確認
超久しぶりにEmacs24.2でC/C++を開発してみた。昔よく使っていた下記のコマンドも問題なく快適に動作。

M-x compile:make -k を起動。コンパイルエラー行にジャンプも可能
M-x gdb:gdbを起動してソースを見ながらコードデバッグ可能


●Google Test(gtest-1.6.0)のインストール
Google TestはWindows環境では公式にはcygwinしかサポートされていない そうだが、自分はMinGWしかインストールしていないので、下記を参考に、コンパイルしてインストール。PythonとCMakeが必要。

How to compile googletest on windows using mingw with msys?
InstallingGoogleTestForWindows

自分の環境ではpthread関連でコンパイルでエラーが発生したので、<インストールDIR>\include\gtest\internal\gtest-port.hファイルの414行目に下記を挿入して再コンパイル。

#define GTEST_HAS_PTHREAD 0


pthreadを入れたMinGW環境でどこまで動作するか少し不安だが、なんとかコンパイルが成功して、MingGWのinclude, libディレクトリへヘッダファイルとライブラリをコピー。

Windows 8 でUbuntu 12.10 (64ビット) 環境構築

Ubuntu 13が間もなくリリースされるとのことですが、新規に購入したWindows8用PCにUbuntu 12.10(64ビット)の環境構築した時のメモを残しておく(結構いろんなところでハマりました)。

【環境】
●パソコン:HP社スリム型デスクトップ:HP Pavilion Slimlines s5-1550jp
●CPU:Core-i7 3770 3.4GHz
●ホストOS:Windows 8(64bit)
●仮想環境:VMWare Player 5.02(64bit)
●Linux:Ubuntu 12.10(64bit)

【実施したこと、参考にさせて頂いたURL】
● Intel VT-xにしないとVMWareの64ビットが「ロングモードには対応していません」というエラーが発生して、64ビット版のUbuntuを正しくインストールできないので、以下のURLを参照して、BIOS(UEFI?)からCPUの仮想化を有効に設定
・ Windows8のBIOS(UEFI?)から仮想化を有効に設定(これも結構苦労した)
 [コンピューター セットアップ(F10)]→[セキュリティ]→[システムのセキュリティ]
 [仮想化技術(VTx/VTd)]を[有効](Enable)に設定

・ 参考URL:VMwareで「ロングモードには対応していません」エラーが出たので対処
・ 参考URL:Windows8からUEFI BIOSへの再起動

● 64ビット版を本家からダウンロードしてインストール
・ 全ての寄付をゼロにして本家からダウンロード
・ コア数:4を指定(3770は4コア)
・ Ubuntuインストール時に、アップデート、サードパーティーのオプションも指定して、アップデートも実施

・ 参考URL:Ubuntu 12.10 Desktop 64bit をインストールする方法

● 本家の64ビット版のUbuntuを以下を参考に日本語対応(SJISやフォントなどをインストールされるらしい)

Ubuntuの日本語環境

● VMWareToolsのインストール(これがないと画面サイズを変更できない)
・ カーネルをアップデートした後は、再度VMWare Toolsをインストールしないと、VMWareの共有フォルダが見えなくなる。ただし、以下を実行しないとVMWare Toolsのインストールで”VMWare Tools Installation - Kernel header files path not valid.”エラーが発生。
  sudo apt-get install linux-headers-generic
   *3.5.0.17から3.5.0.27へ更新される模様

・参考URL:VMware 上の Linux で共有フォルダが見えなくなった
・参考URL:Linux headers not upgraded


● 以下のURLを参考にカスタマイズ、高速化を実施

・ 参考URL:Ubuntu 12.10のインストールとインストール直後のシステム設定

・ Ubuntu 12.10 Dashの検索結果にAmazonの商品を表示させない
・ Ubuntu 12.10 頻繁に表示されるシステムエラーのクラッシュレポートを無効にする
・ Ubuntu 12.10 Google Chromeの正式版をdebパッケージからインストール
・ Ubuntu 12.10 ファイアーウォールを有効にする
・ Ubuntu 12.10 インターネットの接続が遅いときはIPv6を無効化

● Emacs24をUbuntuソフトウェアセンターからインストール
・ Ubuntu12.10の標準日本語入力の設定では、Ctrl-SpaceのEmacsのキーバインドが使われているため、Dashからibusのキーボード・インプット・メソッドを選択してCtrl-Spaceを削除。入力はCtrl-半角/全角か、半角/全角単独でOn/Offするように変更。

●Python 2.7.3
・標準で2.7.3が入っているので、下記を実行して、Python環境を整備。Ubuntu10.04でかなり苦労してPython2.7.2環境を構築したのが、嘘のように簡単に環境構築ができた。

・ easy_install:sudo apt-get install python-setuptools
・ pip:sudo apt-get install python-pip
・ fabric:sudo apt-get install fabric
・ nose:最初から入っているみたい。ただし、実行時には、--exeオプションが必要
  nosetests --exe .
・ coverage:sudo pip install coverage
・ pylint:sudo apt-get install pylint
プロフィール

Author:Zaike Yuki
オブジェクト指向、C++/Java、Python、Eclipse、Android、等に興味を持つソフトウェアエンジニア

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる