私は単純なC++ライブラリを構築しようとしています。相対パスを使って構築する過程で、CMakeは自分のリンクライブラリがどこにあるのかを正しく設定できませんでした。絶対パス設定で成功しました。これは、CMakeの使用を止めさせるものの中にあります。パスを設定するための推奨方法は何ですか?それは絶対パスか相対パスか、なぜですか?CMakeの相対パスに対する絶対パス
0
A
答えて
2
所与:cmake -H/foo -B/bar
/foo/CMakeLists.txt
の実行中
:
${CMAKE_CURRENT_SOURCE_DIR} = /foo
${CMAKE_CURRENT_BINARY_DIR} = /bar
/foo/foo2/CMakeLists.txt
を実行ステートメントすなわち文add_subdirectory(foo2)
、中次いでproject(Foo)
${PROJECT_SOURCE_DIR} = /foo
${PROJECT_BINARY_DIR} = /bar
後:
私たちは別のネストされたプロジェクトが発生した場合${CMAKE_CURRENT_SOURCE_DIR} = /foo/foo2
${CMAKE_CURRENT_BINARY_DIR} = /bar/foo2
${PROJECT_SOURCE_DIR} = /foo
${PROJECT_BINARY_DIR} = /bar
:project(Bar)
は
${CMAKE_CURRENT_SOURCE_DIR} = /foo/foo2
${CMAKE_CURRENT_BINARY_DIR} = /bar/foo2
${PROJECT_SOURCE_DIR} = /foo/foo2
${PROJECT_BINARY_DIR} = /bar/foo2
あなたが見つけるために役立つと位置を正確にファイルされます他の多くの変数がありますが、そのようadd_executable
など
https://cmake.org/Wiki/CMake_Useful_Variables
コマンドを参照してください非明示的なファイルがどこにあるのかを把握しようとしますが、複雑なプロジェクトではそれに頼るのは良い考えではありません。パスを明示的に提供する方が良い(利用可能なCMAKE変数を使用する)。
最後に、cmakeを定期的に使用すると、ソースファイルの構成が弱点であるという結論に至ります。
あなたは私のような幸運であれば、あなたはSugar
パッケージ全体につまずくます:
https://github.com/ruslo/sugar
そして、すべてのソースファイル(およびドキュメント)の悲哀が消えます。
あなたがクロスコンパイルする場合は、ポリーをお勧めします:
https://github.com/ruslo/polly
そして、あなたは一般的なサードパーティのライブラリに依存している場合はうまくハンターから利益を得ることができる:
関連する問題
- 1. 相対パスと絶対パス
- 2. Spring MVC相対パスへの絶対パス
- 3. XSLT絶対パスからの相対パス
- 4. Node.js:相対パスと絶対パス
- 5. 相対パスと絶対パスJava
- 6. linuxの絶対パスを相対パスに変換する方法
- 7. リンクテーブルを相対パスへの絶対パスに変更する
- 8. jQuery Mobile Betaの絶対/相対URLパス
- 9. 相対パスからの絶対URL
- 10. 絶対パスと絶対パスの比較
- 11. 相対パスを絶対パスに変換する
- 12. 絶対パスへの相対パスを変換するBash&Perlスクリプト
- 13. 絶対パスと相対パス - 相対コンテンツリンクを投稿に入れよう
- 14. エクセルVBAでの代わりに、絶対パスの相対パス
- 15. asp.netで相対パスを絶対パスに置き換えます。
- 16. Pythonの相対パスからの絶対パスを見つける
- 17. 絶対パスをバッチファイルの相対パスに変換
- 18. 相対パスから絶対パスを取得するC#
- 19. Windows CMD:絶対パスから相対パスを取得する
- 20. 絶対パスと相対パスをPythonで使用する場合
- 21. 絶対パスからの相対パスの抽出
- 22. java.lang.IllegalArgumentException:java.net.URISyntaxException:絶対パスでの相対パス:Talend内のHbase用
- 23. Linuxのプロセスイメージの絶対パスと相対パス
- 24. 絶対パスまたは相対パスのUWP解析フォルダ
- 25. 相対パスまたは絶対パスの混乱
- 26. Juliaパッケージのデータファイルと絶対パスまたは相対パス
- 27. PhpStormでの相対パス(twigまたは絶対パス)
- 28. JQuery Ajaxでの相対パスと絶対パス
- 29. 絶対パスへの相対パスを変更
- 30. git:ファイルの絶対パスをレポに対して相対
を持っていますどういうわけかあなたのプロジェクトがあなたとは別のマシン上に構築されるなら、絶対パスで何が起こるかを考えましたか? – JBL
環境変数に格納されたパスを使ってみませんか? – Aziuth
CMakeはほとんど絶対パスを使います。しかし、すべてがCMakeシステム変数に関連して定義することができます。これはユーザのカスタマイズも可能であり、サブディレクトリは親変数を継承しますが、これは開発者またはユーザのためのものではありません。最小限の完全なコードを投稿するだけで、より有用なヘルプを得ることができます。 – utopia