Finding Boost, скомпилированный с CLang с CMake

Я скомпилировал Boost 1.51.0 для Windows, используя rubenvbCLang build. Я фактически скомпилировал b2, используя MinGW:

bootstrap mingw
... compiling b2 using mingw...

а затем я скомпилировал библиотеки с помощью CLang:

b2 toolset=clang stage --stagedir=. --build-type=complete --with-regex ...

Кстати, даже если бы я указал --build-type=complete в каталоге lib нет никаких DLL, но я где-то читал, что у CLang все еще есть проблема со связыванием в Windows, так что это может быть причиной. В любом случае, статические библиотеки мне подходят. Я получил эти файлы в %BOOST_ROOT%\lib:

libboost_regex-clang31-1_51.lib
libboost_regex-clang31-d-1_51.lib
libboost_regex-clang31-mt-1_51.lib
libboost_regex-clang31-mt-d-1_51.lib
libboost_regex-clang31-mt-s-1_51.lib
libboost_regex-clang31-mt-sd-1_51.lib
libboost_regex-clang31-s-1_51.lib
libboost_regex-clang31-sd-1_51.lib

Теперь, если я скомпилирую что-нибудь с CLang из командной строки, все будет работать. Проблема показывает, когда я пытаюсь заставить CMake находить библиотеки Boost: он просто не может их найти. Я пытался с этим CMakeFiles.txt:

cmake_minimum_required (VERSION 2.8)
project(ccc)

# Setting/unsetting this does not change anything.
set(Boost_USE_STATIC_LIBS ON)

find_package(Boost COMPONENTS regex REQUIRED)

include_directories(${Boost_INCLUDE_DIR})
link_directories(${Boost_LIBRARY_DIRS})

add_executable(ccc main.cpp)

target_link_libraries(ccc
${Boost_REGEX_LIBRARY}
)

Построение его с использованием MinGW (и скомпилированной версии MinGW Boost) работает. Если я попробую с CLang (после установки CC=clang, CXX=clang++ а также BOOST_ROOT=C:/misc/boost/clang-1_51_0) Это не:

D:\Desktop\ppp>cmake -G "MinGW Makefiles" ..\ccc
-- The C compiler identification is Clang 3.1.0
-- The CXX compiler identification is Clang 3.1.0
-- Check for working C compiler: C:/misc/clang/bin/clang.exe
-- Check for working C compiler: C:/misc/clang/bin/clang.exe -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working CXX compiler: C:/misc/clang/bin/clang++.exe
-- Check for working CXX compiler: C:/misc/clang/bin/clang++.exe -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
CMake Error at C:/misc/cmake/share/cmake-2.8/Modules/FindBoost.cmake:1191 (message):
Unable to find the requested Boost libraries.

Boost version: 1.51.0

Boost include path: C:/misc/boost/clang-1_51_0

The following Boost libraries could not be found:

boost_regex

No Boost libraries were found.  You may need to set BOOST_LIBRARYDIR to the
directory containing Boost libraries or BOOST_ROOT to the location of
Boost.
Call Stack (most recent call first):
CMakeLists.txt:5 (find_package)CMake Error: The following variables are used in this project, but they are set to NOTFOUND.
Please set them or make sure they are set and tested correctly in the CMake files:
Boost_REGEX_LIBRARY (ADVANCED)
linked by target "ccc" in directory D:/Desktop/ccc

-- Configuring incomplete, errors occurred!

Однако, если я скомпилирую вручную, он снова будет работать:

clang++ main.cpp -I%BOOST_ROOT% -L%BOOST_ROOT%\lib -llibboost_regex-clang31-1_51
...Ok, and the executable works

Ручная настройка BOOST_LIBRARYDIR тоже не работает. Ни один не использует обратную косую черту \,

6

Решение

Заглянув внутрь файла «C: /misc/cmake/share/cmake-2.8/Modules/FindBoost.cmake», вы можете найти список всех переменных, связанных с Boost, которые вы можете использовать. Тот, который вам нужен Boost_COMPILER (Boost_DETAILED_FAILURE_MSG также может быть полезно для диагностики проблем):

#   Boost_COMPILER               Set this to the compiler suffix used by Boost
#                                (e.g. "-gcc43") if FindBoost has problems finding
#                                the proper Boost installation
5

Другие решения

Других решений пока нет …