#c #windows #boost #build #cmake
#c #Windows #boost #сборка #cmake
Вопрос:
Некоторые разработчики из нашей команды используют Java и C # версии libphonenumber, библиотеки нормализации международных телефонных номеров.
Они утверждают, что это замечательно / волшебно / и т. Д.
К сожалению, будучи разработчиком Win32 C , мой простой ум не может полностью понять все чудеса и магию CMake, boost и множества других библиотек, и я вообще не могу создать библиотеку.
Может ли кто-нибудь предоставить несколько подсказок или URL-адресов, которые помогут мне указать правильное направление, чтобы мы могли создать этот проект и использовать его?
Текущий камень преткновения возникает при попытке запустить CMake (следуя инструкциям в очень коротком readme) Я получаю следующее сообщение об ошибке:
> -- Could NOT find Boost
> -- Configuring incomplete, errors occurred!
Я думал, что правильно установил BOOST_ROOT, но, видимо, либо я установил это неправильно, либо мне не хватает других переменных env.
Как я могу создать эту библиотеку?
Мы используем VS 2008, но у меня также есть VS 2010 на моей машине. Я был бы рад получить сборку с любым из них.
Комментарии:
1. Доступно ли это даже на C , я думал, что это Java, только JavaScript?
2. @Justin — code.google.com/p/libphonenumber — проблема в том, что инструменты и документация для C (особенно для win32) отсутствуют / ужасны)
3. Для этого требуется: Boost (поток) — вы должны скомпилировать поток boost, буферы протокола, Google Test и libIcu. Это не тривиальная задача.
4. Хм, я знаю, что должен их создать. И я знаю, что это не тривиально — отсюда и вопрос. Вопрос в ТОМ, КАК построить. Материал CMake бесполезен и не работает.
Ответ №1:
Возможно, ваш CMake устарел по сравнению с установленной вами версией Boost. Проверьте файл FindBoost.cmake, расположенный в каталоге CMake Modules. Она должна содержать раздел, подобный этому:
set(_Boost_KNOWN_VERSIONS ${Boost_ADDITIONAL_VERSIONS}
"1.46.1" "1.47" "1.47.0"
"1.46.0" "1.46" "1.45.0" "1.45" "1.44.0" "1.44" "1.43.0" "1.43" "1.42.0" "1.42"
"1.41.0" "1.41" "1.40.0" "1.40" "1.39.0" "1.39" "1.38.0" "1.38" "1.37.0" "1.37"
"1.36.1" "1.36.0" "1.36" "1.35.1" "1.35.0" "1.35" "1.34.1" "1.34.0"
"1.34" "1.33.1" "1.33.0" "1.33")
Комментарии:
1. Спасибо. Я добавил 1.47 и 1.47.0. К сожалению, это, похоже, не исправляет проблему. Как cmake узнает, где искать boost? Я попытался установить boost_root, но, очевидно, я делаю что-то не так…
2. Вы перешли
-DBOOST_ROOT=<your boost path here>
к компилятору?
Ответ №2:
Вы можете попробовать передать BOOST_INCLUDEDIR и BOOST_LIBRARYDIR компилятору; таким образом, вы можете полностью обойти поиск по модулю cmake.
Ответ №3:
- Измените Boost_ADDITIONAL_VERSIONS в FindBoost.cmake, шаг, который вы уже сделали
- Измените CMakeLists.txt из libphonenumbercpp измените строку
find_package (Boost 1.40.0 COMPONENTS thread)
в
set(Boost_USE_STATIC_LIBS ON)
set(Boost_USE_MULTITHREADED ON)
set(Boost_USE_STATIC_RUNTIME OFF) //since CMake 2.8.3
find_package (Boost 1.47.0 COMPONENTS thread)
3. Запустите mkdir build
в libphonenumber cpp, cd build
4. Запустите cmake -G «ваш генератор» -DBOOST_ROOT=»you_path_to_boost_147_0 папка», например: cmake -G "Visual Studio 10" ../ -DBOOST_ROOT="E:libphonenumbercpp3rdparty"
Комментарии:
1. ПРИМЕЧАНИЕ: буферы протокола не могут быть скомпилированы с VS 2010
2. У меня такая же проблема. Я пытаюсь скомпилировать библиотеку protobuf для Windows, используя VS2010, но это не удается. Есть ли другие способы? У меня также есть один вопрос: могу ли я скомпилировать библиотеку libphonenumber для Windows без использования boost???
Ответ №4:
Попробуйте скомпилировать ее с помощью cygwin, это похоже на стандартную среду сборки UNIX, но работает в Windows. Обычно с ее помощью намного проще компилировать библиотеки с открытым исходным кодом, чем с помощью Visual Studio.