38

Linux でのみ実行するように設計されたソフトウェアの一部を MacOS X でビルドしようとしています。CMake を使用しており、MacPorts をインストールしたので、CMake と私たちが依存しているいくつかのサードパーティ ライブラリを簡単に入手できました。 .

ここでの問題は、CMake がデフォルトで MacPorts からライブラリを検索しないように見えるため、すべて/opt/localにある依存関係を見つけることができないため、いくつかのターゲットが無効になっていることです。

MacPorts からインクルードとライブラリも検索するように CMake に指示するにはどうすればよいですか?

4

5 に答える 5

35

CMakeLists.txt ファイルで cmake によって検索される一連のパスに、/opt/local/lib およびその他の可能性のあるインストール パスを追加します。

set(CMAKE_LIBRARY_PATH ${CMAKE_LIBRARY_PATH} /opt/local/lib)

これにより、cmake がライブラリを検索する一連のパスに /opt/local/lib が追加されます。このCMAKE_LIBRARY_PATH手法はfind_library、変数を設定した後のすべてのコマンドに影響します。

より外科的なライブラリごとのアプローチについては、個々の find_library コマンドを変更します。

find_library(Foo foo
    PATHS /opt/local/lib)

これは、ライブラリを探す唯一の場所として /opt/local/lib をハードコーディングしないことに注意してください。むしろ、ライブラリを検索する場所のセットに /opt/local/lib を追加するだけです。多くの場合、私が知っているすべてのマシンで観察された場所をカバーする、多くのそのようなパスを追加することになります。このテーマのその他のバリエーションについては、 find_library のドキュメントを参照してください。

およびコマンドの動作に影響するCMAKE_INCLUDE_PATHを変更することもできます。find_file()find_path()

于 2010-02-06T04:02:16.437 に答える
16

必要なインクルード パスとライブラリ パスを追加する「 Darwin 」のツールチェーン ファイルを追加しました。もう少し自動化を期待していましたが、少なくとも問題は解決しました。

ダーウィン.cmake :

SET(CMAKE_SYSTEM_NAME Darwin)

# Add MacPorts
INCLUDE_DIRECTORIES(/opt/local/include)
LINK_DIRECTORIES(/opt/local/lib)
于 2009-09-29T12:15:14.873 に答える
6

CMake は環境変数を尊重する必要があります。これは、 LinuxDYLD_LIBRARY_PATHの環境変数と同等です。LD_LIBRARY_PATHMacPortsDYLD_LIBRARY_PATHによってインストールされたライブラリを見つけるには、適切なパスが必要です。

于 2009-09-28T15:50:56.303 に答える