rubenvbのCLangビルドを使用してWindowsでBoost1.51.0をコンパイルしました。私は実際にMinGWを使用してb2をコンパイルしました:
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
も機能しません。バックスラッシュも使用しません\
。