2014-03-04 79 views
0

我一直在尝试在今晚的Ubuntu 12.04LTS 64bit盒子上为LLVM libC++ 3.4创建deb。我想先创建一个只包含/usr/lib64/libc++.a而没有任何标题的deb。是的,我知道根据Debian library packaging guide,我应该将文件包含在*-dev包中,但是对于cmakecpack是新的,我希望逐步达到此目的。Cmake/cpack:如何创建一个没有头文件的libC++静态库deb?

所以,我首先改变所述libcxx-3.4/lib/CMakeLists.txt,并增加了如果检查(参见线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挑选。我错过了什么?我会感激一两个提示。

回答

1

我已经找到了我自己的问题的答案。作为cmakecpack的新手,我最初专注于错误的CMakeLists.txtinclude/CMakeLists.txt中的头文件的install命令不是唯一的。主要的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文件来制作真正的开发包:)

+0

如果你有你的答案,然后接受它。 – Peter

+0

嗨,彼得,接受我自己的回答,有两天的等待期。我会。再次感谢。 – user183394

0

请阅读documenation for if

MATCHES是正则表达式,使用if (LIBCXX_ENABLE_SHARED)if (${LIBCXX_ENABLE_SHARED} STREQUAL "ON")代替

+0

Peter。感谢您的回应。恕我直言,这个问题与if语法无关。我尝试了你的建议,但所有的头文件仍然包含在'cpack'中。我会做一个简单的测试用例,看看我能否弄清楚。 – user183394