[解決済み] CMakeでソースファイルを指定する場合、GLOBで指定するのと、1ファイルずつ指定するのと、どちらが良いですか?
質問
CMakeでは、ターゲットのソースファイルを指定する方法がいくつか用意されています。 ひとつはグロビング( ドキュメント ) のようなものである。
FILE(GLOB MY_SRCS dir/*)
もう一つの方法は、各ファイルを個別に指定する方法です。
どのような方法が望ましいのでしょうか?Globbingは簡単そうですが、デメリットもあると聞いています。
どのように解決するのですか?
しかし、大規模で複数の開発者が参加するプロジェクトでは、ファイルを明示的にリストアップした方がミスが少ないことを、長年にわたって認識してきました。
オリジナルの回答です。
グロビングの利点は
-
新しいファイルを追加するのが簡単です。 は一箇所にしか表示されません。 ディスクを使用します。グロブしないことで が重複している。
-
CMakeLists.txt ファイルは、以下のようになります。 より短くなります。これは、次のような場合に大きな利点となります。 があります。グロブしない CMakeのロジックを見失う のような巨大なファイルのリストが存在します。
ハードコードされたファイルリストを使用する利点は、次のとおりです。
-
CMake はディスク上の新しいファイルの依存関係を正しく追跡します。 グロブすると、CMake を実行したときに最初にグロブされなかったファイルは、グロブされなくなります。 拾い上げる
-
必要なファイルだけが追加されるようにします。グロビングを行うと、不要なファイルを拾ってしまうことがあります。 を削除します。
最初の問題を回避するために、touch コマンドを使用するか、または何も変更せずにファイルを書き込むことによって、glob を実行する CMakeLists.txt に "touch" することができます。これにより、CMake は再実行し、新しいファイルをピックアップするようになります。
2番目の問題を解決するには、コードをディレクトリに注意深く整理すればよいのです。最悪の場合は
list(REMOVE_ITEM)
コマンドを使って、グロブドファイルのリストをクリーンアップしてください。
file(GLOB to_remove file_to_remove.cpp)
list(REMOVE_ITEM list ${to_remove})
これが問題になるのは、次のようなものを使っている場合だけです。 git-bisect を使用して、同じビルドディレクトリにある古いバージョンのコードを試してみてください。その場合、正しいファイルをリストに入れるために、必要以上にクリーンアップやコンパイルをしなければならないかもしれません。しかし、このようなケースは非常に稀であり、また、すでにあなたの足元にも及んでいるため、実際には問題とはなりません。
関連
-
[解決済み] CMakeにソースディレクトリにある静的ライブラリをリンクするように指示するにはどうすればよいですか?
-
[解決済み] CMakeの出力をクリアするための'cmake clean'コマンドを探しています。
-
[解決済み] configure --prefix=DIR && make all install ' と同等のCMakeは何ですか?
-
[解決済み] CMakeでディレクトリを作成する
-
[解決済み] CMAKEがエラーを発生させる原因
-
[解決済み] 外部ライブラリへのCMakeリンク
-
[解決済み] CMakeで警告レベルを設定するには?
-
[解決済み] CMAKE_CURRENT_SOURCE_DIRとCMAKE_CURRENT_LIST_DIRの相違点
-
[解決済み] CMakeを使用して、CTestから冗長出力を得るにはどうすればよいですか?
-
[解決済み] CMake target_link_libraries インターフェース依存性
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] CMakeにソースディレクトリにある静的ライブラリをリンクするように指示するにはどうすればよいですか?
-
[解決済み] CMakeの出力をクリアするための'cmake clean'コマンドを探しています。
-
[解決済み] configure --prefix=DIR && make all install ' と同等のCMakeは何ですか?
-
[解決済み】CMAKE_MODULE_PATHを指定する必要がある場合、find_package()はどのように使用するのでしょうか?
-
[解決済み] CMakeを使用して、フォルダ内のすべてのファイルをターゲットに自動的に追加しますか?
-
[解決済み] CMakeでディレクトリを作成する
-
[解決済み] CMAKEがエラーを発生させる原因
-
[解決済み] 外部ライブラリへのCMakeリンク
-
[解決済み] CMakeを使用して、CTestから冗長出力を得るにはどうすればよいですか?
-
[解決済み] CMake target_link_libraries インターフェース依存性