我一直试图在今晚的Ubuntu 12.04LTS 64位盒子上为LLVM libc ++ 3.4创建一个deb。我想首先创建一个只包含/usr/lib64/libc++.a
而没有任何标题的deb。是的,我知道每Debian library packaging guide,我应该将该文件包含在*-dev
包中,但对cmake
和cpack
不熟悉,我希望逐步实现。
所以,我首先更改了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
选取。我错过了什么?我要感谢一两个提示。
答案 0 :(得分:1)
我已经找到了自己问题的答案。作为cmake
和cpack
的新用户,我最初专注于错误的CMakeLists.txt
。 install
中标题的include/CMakeLists.txt
命令不是唯一的。主CMakeLists.txt
文件有一个marcro,其中还有一个install
命令。这也应该被禁用。具体做法是:
在主CMakeLists.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
文件以制作真正的开发包:)
答案 1 :(得分:0)
MATCHES
适用于正则表达式,请使用if (LIBCXX_ENABLE_SHARED)
或if (${LIBCXX_ENABLE_SHARED} STREQUAL "ON")
代替