2014-04-28 79 views
2

zlib無法在源代碼外模式下使用cmake進行編譯。如何使用cmake在out-of-source模式下構建zlib?

我在做什麼錯?

這裏的zlib的工作中源:

mkdir test 
cd test 
mkdir contrib 
mkdir build 
cp /tmp/zlib-1.2.8.tar.gz contrib 
cd contrib 
tar xvf zlib-1.2.8.tar.gz 
cd zlib-1.2.8 
rm zconf.h 
cmake . 
make 

這裏的zlib的失敗亂源:

mkdir test 
cd test 
mkdir contrib 
mkdir build 
cp /tmp/zlib-1.2.8.tar.gz contrib 
cd contrib 
tar xvf zlib-1.2.8.tar.gz 
cd zlib-1.2.8 
rm zconf.h 
cd ../../ 
echo -e cmake_minimum_required\(VERSION 2.6.4\)\\r\\n\ 
project\(MyTestApp\)\\r\\n\ 
\\r\\n\ 
add_subdirectory\(contrib/zlib-1.2.8\)\\r\\n\ 
> CMakeLists.txt 
cd build 
cmake .. 
make 

它失敗:

/home/blah/test/contrib/zlib-1.2.8/test/example.c:8:18: error: zlib.h: No such file or directory 

注: 什麼時我在做?我正在尋求建立一個zlib的本地副本。我不想涉及系統zlib(我的項目涉及交叉編譯)。

我沒有在/ usr/include中安裝zlib.h。 (我卸載zlib-devel)當我確實安裝了zlib-devel軟件包(然後給我一個zlib的系統安裝,我不想),關於zlib.h的錯誤發生了變化,而不是無法找到zconf.h。

病理是一樣的。 example.c文件沒有找到正確的頭文件。你可以很清楚地知道這是從zlib附帶的CMakeLists.txt文件中發生的。構建zlib庫的部分本身提到了ZLIB_PUBLIC_HDRS,但構建該示例的部分沒有提及該變量。因此:它不是在本地尋找標題。 (我在這裏猜測)

+0

什麼呢example.c看起來像?你在用'#include「zlib.h」'你在用'#include '嗎? – niklasfi

+0

example.c使用#include「zlib.h」(這是開箱即用的) – 010110110101

回答

2

zlib的out-of-source版本沒問題。你所做的是:創建一個新的根CMakeLists.txt,然後使用zlib源目錄作爲子目錄。這是行不通的。問題可能是使用CMake變量CMAKE_SOURCE_DIR而不是CMAKE_CURRENT_SOURCE_DIR。在zlib的CMakeLists.txt文件中,嘗試用另一個替換一個文件。

編輯:

在附帶的zlib的的CMakeLists.txt,找到這一行:

include_directories(${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_SOURCE_DIR}) 

它改成這樣:

include_directories(${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}) 
+3

我幾乎不會說它很好。由於我必須編輯zlib附帶的CMakeLists.txt才能完成此工作,因此這種分類方式沒有問題。嘗試運行上面的腳本。 Zlib既可以單獨使用,也可以作爲一個庫鏈接到項目的子包中。你的建議順利運作。謝謝!但我認爲你的意思是CMAKE_CURRENT_SOURCE_DIR,而不是CGAL。 – 010110110101

+0

@ 010110110101是的,我的意思是CMAKE而不是CGAL。我對CGAL的發展有點太過分了。 :-) – lrineau

+1

希望馬克阿德勒會看到這個帖子,並在zlib做這個小調整。 :-) – 010110110101

相關問題