【CMake】colcon build-1使用時のCMakeListsの設定方法についての話 サードパーティのオープンソースライブラリの利用

0. 序文

この間、私は cmake を使用してさまざまなパッケージに適合する方法を学び始めました。簡単に確認できるように、いくつかのプロセスがここに記録されています。
このセクションでは、サードパーティのライブラリの参照と独自のライブラリのエクスポートについて説明します。

1. 外部ライブラリをインポートする

たとえば、github から ompl ライブラリを複製し、それを独自のパッケージで使用したいと考えています。どうすればよいでしょうか?
まず、ompl パッケージと独自の pkg パッケージをワークスペースの src ディレクトリに配置し、事前に ompl をコンパイルします。

colcon build --packages-select ompl

次のコードを pkg パッケージの CMakeFiles ファイルに追加します。

find_package(ompl REQUIRED)

find_package指定されたライブラリの構成ファイルを自動的に見つけてロードします。まず現在の階層ディレクトリ (インストール フォルダー) を検索します。見つからない場合は、システム ディレクトリ (usr/local/share) に移動して検索を続けます (バイナリを使用する場合)。同時にインストール (ソース コードでコンパイルした後、ソース コードが最初に使用されます)。

(REQUIRED: オプションのフィールド。パッケージが見つかる必要があることを意味します。パッケージが見つからない場合、CMake 全体が直ちに停止されます。REQUIRED が指定されていない場合、CMake は実行を継続します。)

ルックアップが完了すると、いくつかのキーワードが返されます。

  1. <LibraryName>_FOUND は、
    目的の関数パッケージが正常に見つかったかどうかを判断するために使用されます。
  2. <ライブラリ名>_INCLUDE_DIR または <ライブラリ名>_INCLUDES には、
    ヘッダー ファイルが含まれるフォルダーのパスが含まれます
  3. <ライブラリ名>_LIBRARY または <ライブラリ名>_LIBRARIES
    ライブラリ ファイル パス

キーワードによって具体的にインデックス付けされたパス アドレスを表示したい場合は、次のコマンドを使用できます。

message(STATUS "find OMPL_INCLUDE:${OMPL_INCLUDE_DIRS}")
message(STATUS "find OMPL_LIB:${OMPL_LIBRARIES}")

ぜひチェックしてみてください。コンパイルにはcolcon buildを使用しているため、出力されたログ情報はワークスペース下のlogフォルダーに保存されます。日付と時刻に対応するフォルダーに入ってstdoutファイルを開くだけです。

次に、ターゲット ライブラリのヘッダー ファイルとライブラリ ファイルをインポートします。

include_directories(   												
  ${
    
    OMPL_INCLUDE_DIRS}
)

add_executable(ompl_test_node 
  src/ompl_test_node.cpp
)

target_link_libraries(ompl_test_node
  ${
    
    OMPL_LIBRARIES}
)

このようにして、ヘッダー ファイルが正常にインポートされ、ライブラリ ファイルがターゲットの実行可能ファイルに正常にリンクされました。

2.カスタムライブラリをエクスポートする

この部分は記事を参照しています: https://zhuanlan.zhihu.com/p/87738686
逆に、find_package() を通じて他の人や将来の自分にモジュールを使用させることもできます。

動的ライブラリをエクスポートする方法については、上記を次のようにadd_executable変更するadd_libraryだけです。

add_library(omcl_ros2 SHARED 
  src/ompl_test_node.cpp
  src/fcl_test_node.cpp
)
ament_target_dependencies(omcl_ros2
  rclcpp
)

target_link_libraries(omcl_ros2
  ${
    
    OMPL_LIBRARIES}
  ${
    
    FCL_LIBRARIES}
)

install(TARGETS
  omcl_ros2
  DESTINATION lib/${
    
    PROJECT_NAME}
)

ダイナミック ライブラリは、によってinstalllib フォルダーにインストールできます。他のパッケージで呼び出された場合、動的ライブラリへのパスは find_package を通じて取得できます。
最後に、ヘッダー ファイルをインストールします。

install(DIRECTORY 
  include/${
    
    PROJECT_NAME}
  DESTINATION include
)

おすすめ

転載: blog.csdn.net/qq_43557907/article/details/126755817