[解決済み] CMakeで複数の実行ファイルを追加する
2023-06-09 23:57:22
質問
C++プロジェクトにおける私のコードは、以下のように構成されています。
-
私はいくつかの
.cpp
と.h
ファイルには、私のクラス -
私はいくつかの
.cxx
ファイルに対してコンパイルされなければなりません。.cpp
ファイルといくつかの外部ライブラリに対してコンパイルされます。
さて、それぞれの
.cxx
ファイルには
main()
メソッドを持っているので、ファイルと同じ名前を持つこれらのファイルごとに異なる実行ファイルを追加する必要があります。
また、これらの
.cxx
ファイルは、同じ外部ライブラリにリンクされないかもしれません。
このビルドをCMakeで書きたいのですが、私は初心者なのですが、どのようにすればよいでしょうか?
どのように解決するのですか?
私の提案は、2つのフェーズで取り組むことです。
-
からのライブラリの構築
.cpp
と.h
ファイルを使用しadd_library
-
すべての
.cxx
ファイルを繰り返し、それぞれから実行ファイルを作成します。add_executable
とforeach
ライブラリの構築
これは、次のような簡単なものです。
file( GLOB LIB_SOURCES lib/*.cpp )
file( GLOB LIB_HEADERS lib/*.h )
add_library( YourLib ${LIB_SOURCES} ${LIB_HEADERS} )
すべての実行ファイルをビルドする
すべての .cpp ファイルをループして、別々の実行ファイルを作成するだけです。
# If necessary, use the RELATIVE flag, otherwise each source file may be listed
# with full pathname. RELATIVE may makes it easier to extract an executable name
# automatically.
# file( GLOB APP_SOURCES RELATIVE app/*.cxx )
file( GLOB APP_SOURCES app/*.cxx )
foreach( testsourcefile ${APP_SOURCES} )
# I used a simple string replace, to cut off .cpp.
string( REPLACE ".cpp" "" testname ${testsourcefile} )
add_executable( ${testname} ${testsourcefile} )
# Make sure YourLib is linked to each app
target_link_libraries( ${testname} YourLib )
endforeach( testsourcefile ${APP_SOURCES} )
いくつかの警告があります。
-
file( GLOB )
は通常推奨されません。新しいファイルが追加されても CMake は自動的に再構築を行わないからです。私はあなたのソースファイルを知らないので、ここでそれを使用しました。 -
状況によっては、ソースファイルがフルパス名で検出されることがあります。必要であれば
の RELATIVE フラグを使います。
find( GLOB ... )
. - 手動で source-files を設定するには CMakeLists.txt を変更する必要があり、これが再構築の引き金となります。以下を参照してください。 この質問 を参照してください。
-
を使用してテスト名を生成しました。
string( REPLACE ... )
. を使用することができました。 get_filename_component を使うことができます。 とNAME_WE
フラグで指定します。
CMake の一般的な情報に関しては、stackoverflow ですでに質問されている、広範な "CMake Overview" のいくつかを読むことをお勧めします。たとえば、次のようなものです。
関連
-
[解決済み】非静的メンバ関数への参照を呼び出す必要がある
-
[解決済み】C++ - 解放されるポインタが割り当てられていないエラー
-
[解決済み】c++でstd::vectorを返すための効率的な方法
-
[解決済み】Visual C++で "Debug Assertion failed "の原因となる行を見つける。
-
[解決済み] スタックアロケーションにより初期化されていない値が作成された
-
[解決済み] CMakeの出力をクリアするための'cmake clean'コマンドを探しています。
-
[解決済み】G++を使用して複数の.cppと.hファイルをコンパイルする場合
-
[解決済み】CMAKE_MODULE_PATHを指定する必要がある場合、find_package()はどのように使用するのでしょうか?
-
[解決済み] 外部ライブラリへのCMakeリンク
-
[解決済み] GTestとCMakeを使った作業の始め方
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】C-stringを使用すると警告が表示される。"ローカル変数に関連するスタックメモリのアドレスが返される"
-
[解決済み】IntelliSense:オブジェクトに、メンバー関数と互換性のない型修飾子がある
-
[解決済み】C++エラー:の初期化に一致するコンストラクタがありません。
-
[解決済み】浮動小数点例外エラーが発生する: 8
-
[解決済み】「std::operator」で「operator<<」にマッチするものがない。
-
[解決済み】クラステンプレートの使用にはテンプレート引数リストが必要です
-
[解決済み】ファイルから整数を読み込んで配列に格納する C++ 【クローズド
-
[解決済み】エラー:free(): 次のサイズが無効です(fast)。
-
[解決済み】なぜ、サイズ8の初期化されていない値を使用するのでしょうか?
-
[解決済み] CMakeでソースファイルを指定する場合、GLOBで指定するのと、1ファイルずつ指定するのと、どちらが良いですか?