0

コードでツリー解析ライブラリ (NHParser) を使用したいと考えています。/home/ikram/parser にライブラリを make-install しました (/home/ikram/parser/include/NHparser/ にインクルード ファイルがあり、/home/ikram/parser/lib/ ディレクトリに lib ファイルがあります)。そもそも、FindNHPARSER.cmake スクリプトに頼らずに、メインの CMakeLists.txt ファイルにライブラリとインクルード ファイルを追加できるかどうか疑問に思っています。はいの場合、どうすればそれを達成できますか?

上記を試してみましたがうまくいかなかったので、FindNHPARSER.cmake を次のように記述しました。

find_path(NHPARSER_INCLUDE_DIR include/NHparser/NHparser.h
                    HINTS PATH_SUFFIXES NHparser)
find_library(NHPARSER_LIBRARY NAMES NHparser)

set(NHparser_LIBRARIES ${NHparser_LIBRARY})
set(NHparser_INCLUDE_DIRS ${NHparser_INCLUDE_DIR})
include(FindPackageHandleStandardArgs)
mark_as_advanced(NHparser_INCLUDE_DIR NHparser_LIBRARY )

正しく書かれていますか?これをメインの CMakeLists.txt スクリプトに含めるにはどうすればよいですか?また、cmake の実行中に CMAKE_MODULE_PATH を設定する必要がありますか?

御時間ありがとうございます。

4

1 に答える 1

1

このような小さな (かなり標準的な) 検索プロセスの場合、コードをメインの CMakeLists.txt に直接追加するだけです。

必要に応じて、別の .cmake ファイルに移動することもできincludeます。その場合は、メインの CMakeLists.txt の適切な場所にそのファイルを配置します。

コードに関しては、かなりシンプルにします。基本的には、関連するものが実際に見つかったことを確認するだけで、次のように呼び出しますfind_pathfind_library

find_path(NHPARSER_INCLUDE_DIR NAMES NHparser.h PATH_SUFFIXES NHparser)
if(NOT NHPARSER_INCLUDE_DIR)
  message(FATAL_ERROR "Didn't find NHparser.h")
endif()

find_library(NHPARSER_LIBRARY NAMES NHparser)
if(NOT NHPARSER_LIBRARY)
  message(FATAL_ERROR "Didn't find NHparser library")
endif()

次のような変数を使用できます。

include_directories(${NHPARSER_INCLUDE_DIR})
...
target_link_libraries(MyExe ${NHPARSER_LIBRARY})

ただし、マシン上のこのライブラリのインストールプレフィックスは「/home/ikram/parser」であるように見えるため、変数が単独で見つかる可能性は低いです。この場所はおそらく自分のマシンに固有のものであるため、CMakeLists.txt にハードコードすることはしません。

代わりに、CMake にそのパスをデフォルトの検索パスのリストに追加させるには、CMakeCMAKE_PREFIX_PATHを呼び出すときに設定するだけです。

cmake . -DCMAKE_PREFIX_PATH=/home/ikram/parser
于 2013-07-18T20:31:23.450 に答える