I am Charmie

メモとログ

cmakeの使い方 (コンパイルしたライブラリを使うため)

とりあえず

xxx-config.cmakeさえ作っておけば良い?

static library

add_libraryでSTATICを指定

  • ファイルの出力先はset_target_properties(ARCHIVE_OUTPUT_DIRECTORY ${DIR_TO_OUTPUT})で指定

shared library

add_libraryでSHAREDを指定

  • ファイルの出力先はset_target_properties(LIBRARY_OUTPUT_DIRECTORY ${DIR_TO_OUTPUT})で指定
  • ライブラリコンパイル時にtarget_link_libraries()で依存ライブラリへのリンクを貼る必要あり

install()

install時の動作を指定

install(TARGETS myExe mySharedLib myStaticLib
        RUNTIME DESTINATION bin
        LIBRARY DESTINATION lib
        ARCHIVE DESTINATION lib/static)
install(TARGETS mySharedLib DESTINATION /some/full/path)

上記の命令で以下のようになる

  • 実行ファイルmyExeを /bin にインストール
  • 静的ライブラリmyStaticLibを /lib/static にインストール
  • 共有ライブラリmySharedLibを /lib と /some/full/path にインストール DLLを作成する場合はmySharedLib DLLを /bin と /some/full/path にインストール
  • インポートするlibraryを /lib/static と /some/full/path にインストール

find_package()で見つけるための xxx-config.cmake を作成するには install(EXPORT)

install(TARGETS myexe EXPORT myproj DESTINATION bin)
install(EXPORT myproj NAMESPACE mp_ DESTINATION lib/myproj)

上記の命令で以下のようになる

  • 実行ファイル myexe を /bin にインストール
  • インポートするコードを /lib/myproj/myproj.cmake にインストール
  • NAMESPACEは :: にするのが最近の傾向っぽい (確かにvcpkgの挙動もそうなってる)

find_package()

  • _FOUND: ライブラリの発見の有無を表す
  • INCLUDE_DIRS or INCLUDES: include path
  • LIBRARIES or LIBS: ライブラリの名前
  • _DEFINITIONS: 追加のコンパイルフラグ