2014-03-04 113 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