CMake: add_subdirectory()
ある開発シナリオ。プロジェクトAはライブラリファイルを出力し、プロジェクトBは実行ファイルを出力するがAの出力に依存し、CMakeを使用して2つのファイルを整理する。
オプション1:
2つのプロジェクトが独立してコンパイルし、Aの出力を固定ディレクトリにインストールし、プロジェクトBがそのディレクトリに行って依存関係を解決する場合、find_library()を使用することができます。
オプション 2:
スクリプトを使用、基本的にはオプション1と同じですが、キーボード操作を大幅に減らすスクリプトを使用します
上記のシナリオは両方とも、プロジェクトBを構成するときに、プロジェクトAの出力ライブラリファイルが既に存在することを前提としています。そうでない場合、find_library()はエラーを表示します。
プロジェクト A がコンパイルされる前にプロジェクト B を正常にコンパイルする、つまり、CMake でプロジェクト B がプロジェクト A に依存していることを指定するのですか?
オプション 3:
プロジェクトBのCMakeLists.txtでADD_SUBDIRECTORY()を使用します。
プロジェクトAがプロジェクトBのディレクトリ構造にない場合、プロジェクトAの出力先であるbinary_dirを指定する必要があります
依存関係がBプロジェクトのディレクトリ構造にない場合、Aプロジェクトの出力パスであるbinary_dirを指定する必要があります。
libのフルネームではなく、プロジェクトAの${PROJECT_NAME}のフルネーム)
オプション3への追加。
プロジェクトAはBとCに依存し、BとCはともにDに依存しています。BとCの両方でADD_SUBDIRECTORY()を使用してDを追加すると、Aをコンパイルするときにエラーになってしまいます。
同じ名前のターゲットがすでに存在するため、ターゲット "D"を作成できません。
解決策は、BとCでtarget属性を使用することです
if (NOT TARGET D)
add_subdirectory( DRoot D)
endif()
Dが繰り返し含まれないようにする
関連
-
mac os python3 エラー dyld: ライブラリがロードされない
-
AttributeError: Linux上のFLASKプロジェクトでデータベースに接続すると、属性を設定できない
-
AttributeError: モジュール 'tensorflow' には 'get_default_graph' という属性がありません。
-
VMware16でWin10システムをインストール
-
Replace invisible characters in linux vi ^@^A\^M etc.
-
sed replace ^A(\001),900,900,900, and other special characters
-
中国標準のKirin OSのyumソースの構成
-
tomcat 起動エラー: java.net.BindException: パーミッションが拒否されました <null>:80
-
有効なファイルシステムのスーパーブロックが見つかりませんでした。
-
vimにコピー(ctrl+c),ペースト(ctrl+v) ctrl+Aなどのショートカットキーが追加されました。
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
SocketExceptionです。ブロークン・パイプ・エラーの可能性
-
kill はプロセスを終了させることができません
-
ソケットプログラミング、エラーの原因 ソケット以外でのソケット操作
-
(98) アドレスが既に使用されている場合の解決策: make_sock: アドレス 0.0.0.0:443 にバインドできませんでした。
-
ImportErrorです。yum という名前のモジュールがないエラー
-
Androidブートローダー:3分で徹底理解するubootの起動と機能
-
CentOS7 crontabが実行されない、エラー /bin/sh: root: コマンドが見つかりません。
-
アセンブリエラーです。Warning: Warning: ブレークポイント 1 を挿入できません。Cannot access memory at address 0x1135 解決策(ブレークポイントを挿入せずに1回目の実行を行う)
-
chownとchomdはLinuxのパーミッションを変更します。
-
CondaHTTPError: HTTP 000 CONNECTION FAILED for url <https://mirrors.tuna.tsi解决办法 protest works