~llamerada/memo/スマートフォン用の表示で見る~llamerada/memo/この広告は、90日以上更新していないブログに表示しています。WARPのビルドは元々Makefileを手作りしていました。Linux/MacOSXごとにライブラリのパス、デバック用かリリース用かなどををハードコードしており、Makefileのメンテナンスの必要がありました。(FSF)、CMakeといツールを使っている場合が多かったです。特徴を調べてCMakeを使うことにしました。CMakeの特徴Unix、XCode、Windowsなどクロスプラットフォームでのビルドを補助する。ビルドを直接行うわけでなく、Makefile、XCode、VisualStudioのプロジェクトを出力するなど、各ネイティブ開発環境との親和性が高そう。(automakeにはないメリット)ソースとは独立した場所でビルドが可能なので、ソースを格納している場所を汚さずにすむ。使い方は参考ページの方がよくわかるので、自分が特に引っかかったところだけ書きます。利用ライブラリのコンパイルオプションの取得方法C/C++のプログラムのコンパイルにはコンパイルオプション(依存するヘッダファイルの場所、最適化オプション、プログラムに渡す定義など)とリンカオプション(依存するライブラリファイルの場所、リンカオプション)が必要になります。それぞれ利用ライブラリに合せて追加する必要があります。CMakeでは調べた限り以下の3つの方法でオプションを集めることができます。find_package依存しているライブラリがFind◯◯.cmakeというファイルを含んでいる場合、ソレを読み込んでオプションを取得することができます。大体のライブラリで使い方は統一されているようですが、LLVMなど複雑なライブラリは、必要な引数を渡すとソレに対応するオプションが戻ってくるなどの少し複雑な動作をする場合もあります。${llvm_libs})add_definitions(${LLVM_DEFINITIONS})pkg_check_module/pkg_search_modulesFind.cmakeファイルがなくてもpkg-configコマンドに対応している(.pcファイルを提供している)ばあい、そこから情報を取得することができます。${FFI_LIBRARIES})find_librarylibmなど、基本的すぎてコンパイルオプションなどほとんどなく、find_packageやpkg-configにも対応していないライブラリはfind_libraryでオプションを取得することができます。${FFI_LIBRARY})環境ごとにcmake、pkg-configどちらがあるか分からないので、組み合わせて書くことができます。pkg-configがあった場合の読み込み処理endif()ListとStringが混同してしまう罠CMakeではListとStringの2つのデータ形式があります。B")Listの内部形式は"A;B"となっており文字列をセミコロンで結合したものです。B;C"のようになり、意図したものと異なる可能性があります。find_packageで読み込んだ値は.cmakeファイルの作りによりListか文字列か変わるようです。pkg_search_moduleの場合、〜CFLAG、〜LIBRARIESはどちらもListで渡されます。〜CFLAGをCMAKE_C_FLAGSに結合すると意図しないセミコロンが混入してコンパイルに失敗します。Listを文字列に結合する場合は以下のように変換する必要がります。Clientが早くもTLSに対応しました。EntriesArchiveはてなブログをはじめよう!llamerad-jpさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。