1

I'm starting to write a data processing library of mine and quite confused about building the proper structure of project and libraries.

Say, I'd like to have a set of functions stored in myfunclib library. My current set up (taken from multiple recommendations online) looks like this:

myproj/include/myfunclib.h - class declaration myproj/include/myfunclib.cpp - class functionality myproj/src/functest.cpp - test file to check functions

Firstly, it feels like this is a proper set up in case I use myfunc only for myproj project, but say I want to reuse it - then I'd need to specify it's path in each of cpp files using it or store multiple copies of it.

Secondly, compilation is a bit bulky in such case:

g++ -I include include/myfunclib.cpp src/functest.cpp

Is it a normal practice to type all that stuff every time? What if I have many custom libraries I need? Is there a way to store them all separately, simply include as 'myfunclib.h' and not worry about recompiling etc?

4

2 に答える 2

0

メイクファイルを使用して、すべての依存関係を処理し、コードをビルドします。構文は非常に単純です。次に、コマンド ラインで「make」と言うだけで、すべてがビルドされます。

ここに良いチュートリアルがあります http://mrbook.org/tutorials/make/

于 2013-03-29T03:50:54.643 に答える
0

もともと私を噛んだいくつかのこと、

テンプレート化されたクラスのみを含める必要があることを覚えておいてください。通常、ソース実装は、通常のクラス実装のようにオブジェクト ファイルに構築するべきではありません。そのため、通常、テンプレート実装全体をインクルード ディレクトリに配置します。

ソースファイルとは、リンクのためにオブジェクトファイルにコンパイルする必要があるコード(定義)を意味し、インクルードはすべての宣言、インライン関数などです。

場合によっては、特定のモジュールに関連するすべてのヘッダーを含むヘッダー ファイルを作成し、その上に、使用しているモジュールのすべてのメイン ヘッダーを含む上位のヘッダー ファイルを作成することがあります。

また、コメントで述べたように、いくつかのビルド ツールを紹介し、それらに慣れる必要があります。これらは、プロジェクト内の依存関係を追跡するのに役立ち、ほとんどの場合、依存関係のサブセットのみが変更されたときにプロジェクト全体を再構築することを回避します。 (これは最初はうまくいくのが難しいかもしれませんが、学ぶ価値があります。makeとg ++を使用する場合、g ++ -MMでこれを機能させる方法があります...すべてのケースでうまく機能するかどうかはわかりません)、私ビルド プロセスについて学べば学ぶほど、プロジェクトの編成方法が劇的に変化し、プロジェクトがより複雑になりました (そして、修正しなければならない欠陥も多くなりました)。

これは、私が通常、開始時にプロジェクトのディレクトリ構造を維持する方法です

build - where all the built files will be stored
app - these are the main apps (can also be split into include/src)
include - includes files
src - src files (compiled into objects and then linked with main compiled app)
lib - any libs (usually 3rdparty libs , if any my src is compiled into a library it usually ends up in build/lib/target/... )

これのいくつかが役立つことを願っています

于 2013-03-29T02:39:37.117 に答える