プロジェクトディレクトリを整理する一般的な方法の一つは、多かれ少なかれ、このようなものです同じディレクトリにあります。名前の衝突を避けるため、ファイル名には会社名やライブラリ名の接頭辞が付いていることがよくあります。 MyLibはMyAppのヘッダー検索パスなどに置かれます。私はファイル名の前に付くファンではありませんが、#include
を見て、そのヘッダーファイルがどこに属しているか正確に知るのが好きです。私はファイルを整理するこのアプローチが嫌いではありませんが、もっと良い方法があるはずです。C++プロジェクトのソースコードのレイアウト
私は新しいプロジェクトを開始しているので、いくつかのディレクトリ構成のアイディアを求めたいと思います。 (即時ライブラリにのみ表示)
#include "util.h" // private util.h file
#include <ProjA/app/other_class.h> // public header file
#include <ProjA/mylib/class_a.h> // using class_a.h of mylib
#include <other3rdptylib/class_a.h> // class_a.h of other3rdptylib, no name collision
#include <class_a.h> // not ProjA/mylib/class_a.h
#include <ProjA/mylib/library_private_helpers.h> // error can't find .h
.cpp
ファイルとプライベート.h
ファイルは(srcがその時々のlibと呼ばれている)srcディレクトリの下に格納されています
ProjA +--include +--ProjA +--mylib +--class_a.h +--app +--other_class.h +--src +--mylib +--class_a.cpp library_private_helpers.h library_private_helpers.cpp +--app +--other_class.cpp app.cpp util.h
app.cpp
:現在、私は、このディレクトリ構造が好き。パブリックヘッダファイルは、project/libディレクトリ構造に編成され、<ProjectName/LibraryName/headerName.h>
を介してインクルードされます。ファイル名の先頭には何も付いていません。他のチームで使用するためにMyLibをパッケージ化する必要があった場合は、makefileを変更して適切なバイナリファイルとインクルード/ ProjAディレクトリ全体をコピーするだけです。
ファイルがソースコントロールにチェックインされ、ファイルに対する作業が開始されると、ディレクトリ構造を変更することは難しくなります。それはすぐに取得する方が良いです。
このようなソースコードの作成経験がある人は誰ですか?あなたはそれについて好きではないものは何ですか?もしあなたがそれを行うより良い方法を持っているなら、私はそれについてよく聞きたいと思います。
私はそれが最初は過度のことになることに同意します。私の懸案事項は、プロジェクトが進んだり、まともなサイズに成長したときに、誰もがすべてのファイルを再構成してすべてのインクルードパスを変更する時間を費やしたくないということです。 –
まあ、そうかもしれない。しかし、あなたはすべてを順番に保つことに熱心であるように、あなたはそれを行うことができます!私は約60人の開発者がチームに分かれている会社で働いています。数週間前、いくつかのチームがファイルを再編成するのに数日を費やしました。整理されたものを整理することは、進行中のプロセスです。コードファイルが大きくなりすぎて管理するのが難しい場合など、良いプログラマーがコードをリファクタリングすると、コードがリファクタリングされます。それはファイルのフォルダとまったく同じです。 –
これらのチームは、今ではどのような構造が必要かを3年前に予測することはできませんでした。彼らがそれを推測しようとしたら、とにかく再編成する必要があったと思います。だから私はそれについて心配するべきではない。プロジェクトの開始時に優れたプラクティスを開発しようとしている場合は、コードの単体テストの仕組みを整理する良い方法と、テストを部分的に実行する方法自動化されたビルドの...ユニットテストは間違いなくあなたが進行中であることを紹介するのは難しいものです。 –