前提
私は現在c++でプログラミングをするとき
下記のようなディレクトリの構造からスタートします。
まずmain関数を記したmain.hppとmain.cppを作成してから
作りたいモジュールをmodule.hppとmodule.cppに記したあとに
まだ必要なモジュールがあるならmodule2.hppとmodule2.cppを追加して
それでもまだ必要なモジュールがあるなら上記の作業を繰り返してます。
そして最後にmakeコマンドでコンパイルして実行ファイルを作成します。
この作業はプログラミングの練習をしているぶんには問題ないと感じております
しかしgithubなどで様々なプロジェクトを眺めてみるとこの作業方法をとってる
プロジェクトを見た事がありません。
なので皆様がどのような方法でc++で作業を進めていくのかとても気になるので
"自分はこんな作業手順で作っていく"や
"自分はこんなディレクトリで作業している"
など具体的に教えていただけたらとてもうれしいです。
また具体例でなくとも"こんなキーワードで調べたら良い"や
"こんな本をを読めばわかる"などのご意見もお待ちしております
どうかご指摘やご回答をよろしくお願いします。
.
├── bin
│ └── a.out
├── include
│ ├── main.hpp
│ └── module.hpp
├── makefile
├── obj
│ ├── main.d
│ ├── main.o
│ ├── module.d
│ └── module.o
└── src
├── main.cpp
└── module.cpp
備考1:main.hppとmain.cppはmain関数を含む処理の主軸となるファイルである。
備考2:module.hppとmodule.cppは自作のライブラリを記載したファイルである。
ちなみにmakefileの中身は下記の通りです。
COMPILER = g++
CFLAGS = -g -MMD -MP -Wall -Wextra
INCLUDE = -I./include
TARGET = ./bin/a.out
SRCDIR = ./src
SOURCES = $(wildcard $(SRCDIR)/*.cpp)
OBJDIR = ./obj
OBJECTS = $(addprefix $(OBJDIR)/, $(notdir $(SOURCES:.cpp=.o)))
DEPENDS = $(OBJECTS:.o=.d)
$(TARGET): $(OBJECTS)
$(COMPILER) -o $@ $^ $(LDFLAGS)
$(OBJDIR)/%.o: $(SRCDIR)/%.cpp
-mkdir -p $(OBJDIR)
$(COMPILER) $(CFLAGS) $(INCLUDE) -o $@ -c $<
all: clean $(TARGET)
clean:
-rm -f $(OBJECTS) $(DEPENDS) $(TARGET)
-include $(DEPENDS)
補足情報(FW/ツールのバージョンなど)
os: LinuxMint18.2(Cinamon)
コンパイラ: g++ 5.4.0
make: GNU Make 4.1
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
+3
一般的にはMakefileは自分で書きません。
autotoolsやcmakeなどのツールで、Makefileを自動生成します。
このようなツールを使うメリットは、
- (Makefileを直に書くよりかは)環境に依存しない。
- 依存するライブラリの対応
- (特にlinuxなど)ディストリビューションのパッケージの作成のしやすさ
などが挙げられます。
デメリットは、各ツールでの使い方があるので、それを覚えなければならない点ですね。
昔はautotools一択でしたけど、GNUツールへの依存が大きいのが欠点ですね。
cmakeの方がVisualStudioでも使えて、便利です。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
checkベストアンサー
+2
こんにちは。
疑問点は、作業の進め方なのでしょうか?
どんなプロジェクトでも、「必要なソースを作り、ビルド・システムを構築し、ビルドしてデバッグする」、「必要に応じてソースを追加する」という作業手順は異なることはないと思います。diodeさんの手順も同様ですね。
しかしgithubなどで様々なプロジェクトを眺めてみるとこの作業方法をとってる
プロジェクトを見た事がありません。
そんなことはありません。多数のコミットがあるプロジェクトで一度もソースを追加したことがないプロジェクトは存在しないのでは?
ビルド・ツリーとソース・ツリーが入り混じっているのは、結構デメリットが多いです。
「CMake : out-of-sourceビルドで幸せになる」という記事がありました。CMakeはこの2つを分ける、分けないどちらも対応していますが、分けた方が幸せという記事ですね。この記事で書かれている分けることのメリット/デメリットはCMake限定ではなく一般的な話です。
他に気になった点としては、includeとsrcフォルダが別れていることですね。
ソース・ツリー上でこの2つを分けているプロジェクトの方が多いのですが、個人的には分けない方が生産性は上がりやすいと感じます。例えばmodule.hppとmodule.cppを両方同じように修正することは多々あります。その際、近くに配置した方が楽なように感じます。微細差ですが「チリも積もれば」です。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
+2
CLion や VisualStudio 等の統合開発環境は検討されましたか?
VisualStudio は linux 不可、CLion は有料という欠点はありますが…
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
+2
最近、やってないけど、以前(10年以上前)は、結構、makefileは書いてました。
どこまで、凝った事をしたいかによりますが、特に問題は無かったです。
ただ、以前のmakeは、方言があったので、そっちの方が問題って感じでしたが。
その頃から、こんな本、、とかより、Help(or manページ)を見る事が多い気がします。特に、方言とか、バージョン依存は確認が大変ですね。
と言いつつ、最近は Windows上が多いので、Visual Studio一択の感じ。簡単なものなら、コマンドラインで、、。
あと、ソースコードが複数のディレクトリにまたがった事も考えれた方が良いかと。(数が増えると分けたくなる..)
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
0
なんでもかんでもmodule.hpp
/module.cpp
に突っ込むのではなくて、もっと細分化していくことも検討してもいいかもしれません。
cmakeを使うとmakeの代わりにninjaのような高速なタスク管理を使える利点もあります(もっとも全体のコンパイルが5分超えるような巨大さにならないと実感しないかもですが)
それはそれとして、gccが5.4.0って古いのでは・・・?
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.37%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
2019/11/30 05:06 編集
ご回答誠にありがとうございます。
Makefileは一般的に自分で書かないものなのですね...
maai様より"IDEを使ったほうが良い"と御回答を頂いたので
Linuxで使えてなお無料のEclipseと
katsuko様からのご提案であるCMakeを組み合わせて使用すれば
更に効率的に作業ができるのかなと感じました。
貴重な御意見誠にありがとうございます。
ベストアンサーにつきましては様々な方のご回答を拝見してから
決めたいと考えておりますのでもう少し様子を見て決めようと考えております。