GNU/Linux >> Linux の 問題 >  >> Linux

既存の Makefile から CMakeLists ファイルを作成する

このように:

target_link_libraries(your-target-name pthread boost_thread-mt etc)

ライブラリをリンクする場合は、add_dependencies を使用しないでください。リンクは依存関係を意味しますが、リンクする必要がある場合、依存関係だけでは十分ではありません。


残念ながら、Makefile から CMakeList への単純な 1:1 変換はありません。 CMake はすべてのプラットフォームで実行されることになっているため、GNU make のようなプラットフォーム固有の仮定に依存することはできず、特定の場所で事態が複雑になります。

特に、CMake は、ライブラリを使用するための非常に強力でかなり複雑なメカニズムを提供します。ライブラリの名前を指定して find_package を呼び出すと、cmake モジュール パスからライブラリ検索スクリプトが呼び出されます。このスクリプト (これも CMake で記述されています) は、ライブラリのヘッダーと lib ファイルの場所を検出し、それらを 2 つの CMake 変数に格納して、include_directories や target_link_libraries などの適切な CMake コマンドに渡すことができるようにします。

この方法には 2 つの問題があります。まず、検索スクリプトが必要です。幸いなことに、CMake には Pthreads、Boost、およびその他のいくつかの検索スクリプトが付属していますが、よりエキゾチックなライブラリを使用している場合は、検索スクリプトを自分で作成する必要があるかもしれません。これは、最初は難解な経験です...

2 つ目の大きな問題は、検索スクリプトが結果を返すための標準的な方法がないことです。使用される変数には命名規則がありますが、多くの場合、それらは適用されません。実際には、検索スクリプトのソースをチェックアウトして、その使用方法を知る必要があることを意味します。幸いなことに、CMake に付属するスクリプトのほとんどは、十分に文書化されています。

組み込みスクリプトは <cmake-install-prefix>/share/cmake-2.8/Modules のような場所にあります .ご質問については、FindBoost.cmake および FindThreads.cmake ファイルをご覧ください (CMake は自動的に標準ライブラリにリンクする必要があります)。 Anycorn は、Boost スクリプトを使用するためのサンプル コードを既に提供しています。他に知っておくべきことはすべて、CMake のドキュメントまたは検索スクリプト ファイルに直接記載されています。


Boost では、パッケージ ファインダーを使用する必要があります

  set(Boost_ADDITIONAL_VERSIONS "1.46" "1.46.0" "1.46.1")
  set(Boost_USE_MULTITHREADED ON) # for -mt
  find_package(Boost COMPONENTS thread)
  if(Boost_FOUND)
    MESSAGE(STATUS "Found Boost: ${Boost_LIBRARY_DIRS}")
    MESSAGE(STATUS "Found Boost libraries: ${Boost_LIBRARIES}")
    set(LIBRARIES "${LIBRARIES};${Boost_LIBRARIES}")
  else()
    MESSAGE(FATAL_ERROR "Boost Thread NOT FOUND")
  endif()

target_link_libraries(executable ${LIBRARIES})

Linux
  1. Linuxでファイルを見つける方法

  2. tcpdumpのフィルタリング:カオスからの順序の作成

  3. ファイルからGrepパターンを読み取る?

  1. .tar.gz ファイルの作成時にディレクトリを除外する

  2. PPK ファイルから PEM を作成する

  3. install -c は cp とどう違うのですか

  1. .htaccessファイルでリダイレクトを作成するための初心者向けガイド

  2. Web証明書のCSRファイルを作成します。

  3. Awkからファイルをキャットする方法は?