0

今夜、Ubuntu 12.04LTS 64ビットボックスでLLVM libc ++ 3.4のdebを作成しようとしています。/usr/lib64/libc++.a最初に、ヘッダーなしで構成された deb を作成したいと思います。はい、Debian ライブラリ パッケージ ガイド*-devに従って、ファイルをパッケージに含める必要があることはわかっcmakecpackいます。

そのため、最初に を変更しlibcxx-3.4/lib/CMakeLists.txt、if チェックを追加しました (14 行目と 18 行目を参照)。

$ cat CMakeLists.txt
 1  if (NOT LIBCXX_INSTALL_SUPPORT_HEADERS)
 2    set(LIBCXX_SUPPORT_HEADER_PATTERN PATTERN "support" EXCLUDE)
 3  endif()
 4  
 5  file(COPY .
 6    DESTINATION "${CMAKE_BINARY_DIR}/include/c++/v1"
 7    FILES_MATCHING
 8    PATTERN "*"
 9    PATTERN "CMakeLists.txt" EXCLUDE
10    PATTERN ".svn" EXCLUDE
11    ${LIBCXX_SUPPORT_HEADER_PATTERN}
12    )
13  
14  if (${LIBCXX_ENABLE_SHARED} MATCHES "ON")
15    install(DIRECTORY "${CMAKE_BINARY_DIR}/include/c++/v1/"
16      DESTINATION include/c++/v1/
17      )
18  endif()

次に、buildサブディレクトリで、私は発行しました

CC=clang CXX=clang++ cmake -j2 -G "Unix Makefiles" -DLIBCXX_CXX_ABI=libcxxabi -DLIBCXX_LIBCXXABI_INCLUDE_PATHS="../libcxxabi/include" -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr ../libcxx -DLIBCXX_ENABLE_SHARED=OFF

作成された はdebまだすべてのヘッダーで構成されています。14 行目から 18 行目をコメントアウトすると、パッケージにはヘッダーが含まれていません。私はこれに困惑しています。親に対して定義された変数はCMakeLists.txt、子によって取得される必要がありますCMakeLists.txt。私は何を取りこぼしたか?ヒントをいただければ幸いです。

4

2 に答える 2

1

私は自分の質問に対する答えを見つけました。cmakeとに不慣れだったのでcpack、最初は間違った に焦点を合わせましたCMakeLists.txtinstallのヘッダーのコマンドはinclude/CMakeLists.txt唯一のものではありません。メインCMakeLists.txtファイルには、installコマンドも含まれるマクロがあります。それも無効にする必要があります。具体的には:

mainCMakeLists.txtでは、次のことができます。

   129    message(STATUS "Inside of setup_abi_libs; LIBCXX_ENABLE_SHARED: ${LIBCXX_ENABLE_SHARED}")
   130    if (LIBCXX_ENABLE_SHARED)
   131      install(DIRECTORY "${CMAKE_BINARY_DIR}/include/"
   132        DESTINATION include/c++/v1
   133        FILES_MATCHING
   134        PATTERN "*"
   135        )
   136    endif()
   137  endmacro()

次に、 で、次のinclude/CMakeLists.txtことができます。

13  
14  message(STATUS "Inside of include; LIBCXX_ENABLE_SHARED: ${LIBCXX_ENABLE_SHARED}")
15  
16  if (LIBCXX_ENABLE_SHARED)
17    install(DIRECTORY "${CMAKE_BINARY_DIR}/include/c++/v1/"
18      DESTINATION include/c++/v1/
19      )
20  endif()

これは、取得しようとしていたが昨夜失敗した最終結果です。

$ dpkg-deb -c libcxx_3.4-1_amd64.deb 
drwxrwxr-x root/root         0 2014-03-04 08:59 ./usr/
drwxrwxr-x root/root         0 2014-03-04 08:59 ./usr/lib64/
-rw-r--r-- root/root   1928770 2014-03-04 08:58 ./usr/lib64/libc++.a

もうヘッダーはありません。CMakeLists.txt元のファイルを変更して実際の開発パッケージを作成する方法を理解する必要があります:)

于 2014-03-04T17:04:13.443 に答える
0

次の場合はドキュメントをお読みください:

MATCHESは正規表現用です。代わりにif (LIBCXX_ENABLE_SHARED)orを使用してくださいif (${LIBCXX_ENABLE_SHARED} STREQUAL "ON")

于 2014-03-04T12:36:19.833 に答える