CMakeLists.txtに追加ライブラリを追加する必要があります。どうやってやるの?あなたのCMakeLists.txt
ファイル(必要に応じOFFからONに任意のオプションを変更)でこれを入れてCMakeLists.txtにどのように追加ライブラリを追加しますか
答えて
:
set(Boost_USE_STATIC_LIBS OFF)
set(Boost_USE_MULTITHREADED ON)
set(Boost_USE_STATIC_RUNTIME OFF)
find_package(Boost 1.45.0 COMPONENTS *boost libraries here*)
if(Boost_FOUND)
include_directories(${Boost_INCLUDE_DIRS})
add_executable(progname file1.cxx file2.cxx)
target_link_libraries(progname ${Boost_LIBRARIES})
endif()
は明らかに私は*boost libraries here*
を置く場所あなたがしたいライブラリを配置する必要があります。あなたが書きたいfilesystem
とregex
ライブラリを使用している場合たとえば、:
find_package(Boost 1.45.0 COMPONENTS filesystem regex)
'lexical_cast'のように、ヘッダのみのライブラリにコンポーネントを指定する必要はありません。したがって、 'find_package'と' include_directories'コマンドだけが必要です。 –
Windowsでは、これをcmakeファイルに追加することもできます:ADD_DEFINITIONS(-DBOOST_ALL_NO_LIB)そうでなければ、http://stackoverflow.com/questions/28887680/linking-boost-library-with-boost-use-静的なlib-off-on-windows –
は、BOOST_USE_STATIC_LIBSをONに設定し、Boost_USE_STATIC_RUNTIMEをOFFに設定できますか? & 逆もまた同様。 – squid
使用可能なブーストライブラリを検索するfind_packageを使用することができます。ブーストの検索をFindBoost.cmakeに延期します。これは、デフォルトでCMakeと共にインストールされます。
ブーストを見つけると、find_package()
コールは多くの変数を埋め込んでいます(FindBoost.cmakeのリファレンスを参照)。その中には、BOOST_INCLUDE_DIRS
、Boost_LIBRARIESおよびBoost_XXX_LIBRARYの変数があり、XXXは特定のBoostライブラリに置き換えられています。これらを使用してinclude_directoriesとtarget_link_librariesを指定することができます。
は、あなたがブースト:: program_optionsを必要と押し上げるだろうと仮定::正規表現は、あなたのようなものだろう:
find_package(Boost REQUIRED COMPONENTS program_options regex)
include_directories(${Boost_INCLUDE_DIRS})
add_executable(run main.cpp) # Example application based on main.cpp
# Alternatively you could use ${Boost_LIBRARIES} here.
target_link_libraries(run ${Boost_PROGRAM_OPTIONS_LIBRARY} ${Boost_REGEX_LIBRARY})
いくつかの一般的なヒント:
- を検索、FindBoostをチェック環境変数$ ENV {BOOST_ROOT}です。この変数は、必要に応じてfind_packageを呼び出す前に設定できます。
- 複数のビルドバージョンのブースト(マルチスレッド、スタティック、共有など)がある場合は、find_packageを呼び出す前に、希望する構成を指定できます。これを行うには、次の変数のいくつかを
On
に設定します。Boost_USE_STATIC_LIBS
,Boost_USE_MULTITHREADED
Boost_USE_STATIC_RUNTIME
- Windowsでのブーストを検索する場合は、自動リンクに注意してください。 referenceの「Visual Studioユーザー向けのメモ」をお読みください。
- 私のアドバイスは、自動リンクを無効にしてcmakeの依存関係の取り扱いを使用することです:
add_definitions(-DBOOST_ALL_NO_LIB)
- いくつかのケースでは、あなたが明示的にダイナミックなブーストを使用することを指定する必要があります。
add_definitions(-DBOOST_ALL_DYN_LINK)
- 私のアドバイスは、自動リンクを無効にしてcmakeの依存関係の取り扱いを使用することです:
一般的なヒントありがとうございます。彼らは私をたくさん助けました。 –
信じられないほど役に立つ答え!私はこれを2年前に見つけたので、私に多くの時間を救ったでしょうか?素晴らしい覚書。 – Ela782
私は答え1と2に同意します。しかし、私は別々に各ライブラリを指定することを好む。これにより、大規模なプロジェクトでは熟練度がより明確になります。 しかし、(大文字小文字を区別する)変数名を誤って入力する危険性があります。 この場合、直接的なcmakeエラーはありませんが、未定義の参照リンカーの問題が後で発生するため、解決に時間がかかることがあります。私は書かれていた場合は、「BOOST_PROGRAM_OPTIONS_LIBRARY」cmakeのではなくトリガー誤りがあっただろう
VerifyVarDefined(Boost_PROGRAM_OPTIONS_LIBRARY Boost_REGEX_LIBRARY)
target_link_libraries(run ${Boost_PROGRAM_OPTIONS_LIBRARY} ${Boost_REGEX_LIBRARY})
:そこで私は、次のcmakeの機能を使用しますように、上記例えば
function(VerifyVarDefined)
foreach(lib ${ARGV})
if(DEFINED ${lib})
else(DEFINED ${lib})
message(SEND_ERROR "Variable ${lib} is not defined")
endif(DEFINED ${lib})
endforeach()
endfunction(VerifyVarDefined)
を、これが見えます後でリンカによってトリガされます。インポートされたターゲットを備えたモダンなCMakeの構文についてLainIwakuraの答え@適応
、これは次のようになります。それはすでにを通じての世話をしているので、手動で含めるディレクトリを指定するにはもう必要がないこと
set(Boost_USE_STATIC_LIBS OFF)
set(Boost_USE_MULTITHREADED ON)
set(Boost_USE_STATIC_RUNTIME OFF)
find_package(Boost 1.45.0 COMPONENTS filesystem regex)
if(Boost_FOUND)
add_executable(progname file1.cxx file2.cxx)
target_link_libraries(progname Boost::filesystem Boost::regex)
endif()
注意インポートされたターゲットBoost::filesystem
およびBoost::regex
regex
およびfilesystem
は、必要なブーストライブラリで置き換えることができます。
ブーストのすべてに対してリンクすると言うとしたらどうなるでしょうか?私は、そこにあるすべての図書館をリストアップせずにいることを意味します。 –
ブーストのヘッダーのみの部分を使用する場合は、 'Boost :: boost'で十分です。すべてのコンパイルされたブーストライブラリは明示的に指定する必要があります。 – oLen
これは一部の人に役立つ可能性があります。エラーの追加のシンボル:「_ZN5boost6system15system_categoryEv」 //usr/lib/x86_64-linux-gnu/libboost_system.so.1.58.0シンボルに 未定義の参照:いくつかを ありました DSOは、コマンドラインから欠落している私はいたずらなエラーが発生しましたcmakeList.txtの問題と私は明らかに "システム"と "ファイルシステム"ライブラリを含めるために行方不明だった。そこで、私はCMakeLists.txtにこれらの行を書きました。
これらの行は、プロジェクトの実行可能ファイルを作成する前に最初に書き込まれます。この段階では、ブーストライブラリをプロジェクトの実行可能ファイルにリンクする必要はありません。
set(Boost_USE_STATIC_LIBS OFF)
set(Boost_USE_MULTITHREADED ON)
set(Boost_USE_STATIC_RUNTIME OFF)
set(Boost_NO_SYSTEM_PATHS TRUE)
if (Boost_NO_SYSTEM_PATHS)
set(BOOST_ROOT "${CMAKE_CURRENT_SOURCE_DIR}/../../3p/boost")
set(BOOST_INCLUDE_DIRS "${BOOST_ROOT}/include")
set(BOOST_LIBRARY_DIRS "${BOOST_ROOT}/lib")
endif (Boost_NO_SYSTEM_PATHS)
find_package(Boost COMPONENTS regex date_time system filesystem thread graph program_options)
find_package(Boost REQUIRED regex date_time system filesystem thread graph program_options)
find_package(Boost COMPONENTS program_options REQUIRED)
ファイルの最後に、私はプロジェクトの実行可能ファイルとして "KeyPointEvaluation"を考慮してこれらの行を書きました。
if(Boost_FOUND)
include_directories(${BOOST_INCLUDE_DIRS})
link_directories(${Boost_LIBRARY_DIRS})
add_definitions(${Boost_DEFINITIONS})
include_directories(${Boost_INCLUDE_DIRS})
target_link_libraries(KeyPointEvaluation ${Boost_LIBRARIES})
target_link_libraries(KeyPointEvaluation ${Boost_PROGRAM_OPTIONS_LIBRARY} ${Boost_FILESYSTEM_LIBRARY} ${Boost_REGEX_LIBRARY} ${Boost_SYSTEM_LIBRARY})
endif()
- 1. opencvをcmakelists.txtに追加します。
- 2. 追加のCMakeLists.txtを含めるには
- 3. ライブラリをグラデーションに追加しよう
- 4. Ctags langmapにCMakeLists.txtパターンを追加
- 5. Linkedinライブラリ&authを私のプロジェクトにどのように追加しますか?
- 6. アンドロイドスタジオプロジェクトにライブラリを追加しますか?
- 7. どのように私は<math.h>ライブラリをcmakeに追加しますか?
- 8. CMakeLists.txtにopencvライブラリを追加する方法がわからない
- 9. アンドロイドスタジオプロジェクトにライブラリを追加しようとしています
- 10. ライブラリをsilexに追加します
- 11. サブビューをバックボーンにどのように追加しますか?
- 12. どのようにプロジェクトにアイコンを追加しますか?
- 13. どのように要素をハッシュマップに追加しますか?
- 14. C++コンソールアプリケーションにサウンドをどのように追加しますか?
- 15. Java:オブジェクトにデータをどのように追加しますか?
- 16. ImageViewをListFragmentにどのように追加しますか?
- 17. どのようにパスをJavaクラスに追加しますか?
- 18. Tracイベントタイムラインにどのようにイベントを追加しますか
- 19. SDKをAndroidスタジオにどのように追加しますか?
- 20. インターンをDojoプロジェクトにどのように追加しますか?
- 21. NSakeのRequestExecutionLevelオプションをCMakeLists.txtに追加するには
- 22. どこに外部ライブラリを追加しますか?
- 23. Nativescriptでファイルにどのように追加しますか?
- 24. ボタンへのリンクをどのように追加しますか?
- 25. android NDK CMakeLists.txtにcpp/hファイルを追加するには? myClass.h - -
- 26. 標準アウトラインをどのように追加しますか?
- 27. Rack :: Server.build_appはどのようにミドルウェアを追加しますか?
- 28. SOLR Cellはどのようにドキュメントコンテンツを追加しますか?
- 29. Ionic 3 Ipad Stylesをどのように追加しますか
- 30. SharpDevelop、データソースをどのように追加しますか?
この行のrosbuild_add_boost_directories()は何をしますか? – laksh