Bebu hat geschrieben:Hast du auch mal Boost 1.46 versucht?
Irgendwo da ist ein Haken versteckt, über den ist Xin auch schon gestolpert. Ich suche noch nach einer Möglichkeit eine bestimmte Boost Version als Required in Cmake festzulegen. Hat da jemand eine Idee?
Erstens: Ja, ich habe eine Idee. Nachdem ich mich um das Build-System kümmere hätte man mich ruhig per Mail, per PN oder im Buildsystem-Thread fragen können, anstatt zu verzweifeln:
Code: Alles auswählen
Index: filesearch/CMakeLists.txt
===================================================================
--- filesearch/CMakeLists.txt (Revision 154)
+++ filesearch/CMakeLists.txt (Arbeitskopie)
@@ -4,7 +4,7 @@
cmake_minimum_required(VERSION 2.6)
# we using boost filesystem and thread
-find_package(Boost COMPONENTS filesystem REQUIRED)
+find_package(Boost 1.46.0 COMPONENTS filesystem REQUIRED)
# taking current source directory as include directory
include_directories (${CMAKE_CURRENT_SOURCE_DIR})
Zweitens: wieso muss man denn unbedingt die Version so hoch zwingen? Und warum ist sie überhaupt schon auf 1.44? Werden da tatsächlich neue Features benötigt?
Die betreffende Codestelle:
Code: Alles auswählen
/*create a boost error_code for use in the following boost functions;
We don't want Exceptions*/
boost::system::error_code ec;
if( boost::filesystem::exists( Path, ec ) )
Wieso genau wird da eigentlich der exists() Funktion der Error-Code mitgegeben? In der Doku von Boost steht nämlich nichts davon, dass diese Funktioin eine Exception werfen kann:
http://www.boost.org/doc/libs/1_44_0/li ... tml#exists
http://www.boost.org/doc/libs/1_46_1/li ... tml#exists
Ok, wie ich gerade sehe wird in der neueren Version ein filesystem_error geworfen, ich kann mir nur nicht vorstellen in welcher Situation ^^
Aber: Was ist denn so schlimm an einer exception? Ich sehe jetzt keinen Vorteil daran jedes mal
Code: Alles auswählen
if( ec != 0 )
{
InfoFilesearch == Dedupe::State::IgnoreFile;
SetErrorMessage( ec.message() );
}
zu schreiben anstatt das ganze in einen Try-Block zu packen und genau das gleiche nur ein einziges mal im catch-Block zu schreiben. Genau dafür sind Exceptions ja eigentlich da ^^
Ps.: Hätte mir nicht vielleicht auch jemand Bescheid sagen können dass Sqlite benötigt wird, sodass man das in den CMake files ändert? Leute, wie baut ihr eigentlich euren Code???
Edit: Ich habe es gerade nochmal versucht. Bei mir baut alles so, wie es soll. Ich baue auf Debian Testing, mit den Boost Bibliotheken aus den Quellen.
Klar, du hast ja auch ein neueres Boost. Diese Überladung (mit b::s::error_code) gibts im alten noch nicht.
Haters gonna hate, potatoes gonna potate.