0

今晚我一直在尝试在 Ubuntu 12.04LTS 64 位机器上为 LLVM libc++ 3.4 创建一个 deb。我想首先创建一个只包含/usr/lib64/libc++.a没有任何标题的 deb。是的,我知道根据Debian 库打包指南,我应该将文件包含在一个*-dev包中,但是对于cmakeandcpack来说,我想逐步实现。

所以,我首先更改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 行,则包中不包含任何标题。我对此感到困惑。为 parent 定义的变量CMakeLists.txt应该由 child 拾取CMakeLists.txt。我错过了什么?我会很感激一两个提示。

4

2 回答 2

1

我已经找到了我自己问题的答案。作为新手cmakecpack我最初关注的是错误的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)orif (${LIBCXX_ENABLE_SHARED} STREQUAL "ON")代替

于 2014-03-04T12:36:19.833 回答