2012-10-03 102 views
6

我在Windows上使用rubenvb的CLang編譯編譯了Boost 1.51.0。其實,我編B2使用MinGW的:用CMake與CLang編譯查找Boost

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

,然後我編譯庫鏗鏘:

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 

現在,如果我編譯鏗鏘的命令行一切正常的東西。這個問題表明,當我嘗試使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的升壓的編譯版本),它的工作原理建立它。如果我鏗鏘嘗試(已設置好的CC=clangCXX=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也不管用。也不使用反斜槓\

回答

5

查看文件「C:/misc/cmake/share/cmake-2.8/Modules/FindBoost.cmake」,您可以找到所有與您可以使用的Boost相關的變量列表。你需要的是一個Boost_COMPILERBoost_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 
+1

設置'Boost_COMPILER'到'-clang31' *和*'Boost_USE_STATIC_RUNTIME'到TRUE;並解決問題。謝謝。 – Claudio