私のプロジェクトのgitサブモジュールとしてxgboostライブラリを追加しました。サブディレクトリとしてcmakeに追加しようとしています。残念ながら、それは動作していません。以下のCMakeLists.txtを持つ単純なhello worldプロジェクトは、私が得ているエラーを再現します。CMakeサブディレクトリとして追加したときにライブラリを構築しない
cmake_minimum_required(VERSION 3.2)
project(foo)
add_subdirectory(xgboost)
add_executable(${PROJECT_NAME} foo.cpp)
target_link_libraries(${PROJECT_NAME} xgboost)
は、ライブラリを構築した後ので、私は次のエラーを取得するxgboost/libにディレクトリには何もありません。
clang: error: no such file or directory:
'/Users/.../myproject/xgboost/lib/libxgboost.dylib'
CMakeListsファイルには2つの異なるターゲットがあるため、問題が発生していると思います。多分cmakeは間違ったターゲットを選んでいるが、私はそれを理解するためにcmakeに十分に精通していない。次のコードはxgboostのCMakeListsのコードです。重要度の順に
# Executable
add_executable(runxgboost $<TARGET_OBJECTS:objxgboost> src/cli_main.cc)
set_target_properties(runxgboost PROPERTIES
OUTPUT_NAME xgboost
)
set_output_directory(runxgboost ${PROJECT_SOURCE_DIR})
target_link_libraries(runxgboost ${LINK_LIBRARIES})
# Shared library
add_library(xgboost SHARED $<TARGET_OBJECTS:objxgboost>)
target_link_libraries(xgboost ${LINK_LIBRARIES})
set_output_directory(xgboost ${PROJECT_SOURCE_DIR}/lib)
#Ensure these two targets do not build simultaneously, as they produce outputs with conflicting names
add_dependencies(xgboost runxgboost)
私の質問は以下のとおりです。
- はxgboostのCMakeLists.txtファイルを変更することなく、それを修正する方法はありますか?
- 私のプロジェクトにgitサブモジュールとしてxgboostを追加するのは妥当ですか?
- cmakeがライブラリのビルドを指示していない理由はありますか?
注:問題を絞り込んで詳細を提供しようとしたので、この質問にいくつかの編集がありました。
私のCMakeListsファイルの関連部分が欠落していると思ったら、私に教えてください。 – German
奇妙なことに、 'target_link_libraries'で** target **を使うとき、CMakeはどこの場所でもライブラリファイルを見つけるはずです。ライブラリを見つけられないという正確なエラーメッセージを提供できますか? – Tsyvarev
@Tsyvarev質問にエラーを追加しました。 – German