2015-03-05 30 views
7

My CMakeFiles.txt wygląda następująco:Linking Boost biblioteka z Boost_USE_STATIC_LIB OFF na Windows

cmake_minimum_required (VERSION 2.6) 

# Set warnings on and enable debugging 
SET(CMAKE_C_FLAGS "-Wall -q") 

include(FindBoost) 

set(Boost_USE_STATIC_LIBS ON) 
set(Boost_USE_MULTITHREADED ON) 
set(Boost_USE_STATIC_RUNTIME OFF) 

find_package(Boost 1.57.0 COMPONENTS system filesystem REQUIRED) 

if(Boost_FOUND) 
    message(STATUS "Boost found!") 
    include_directories(${Boost_INCLUDE_DIRS}) 
    add_executable(foo main.cpp) 

    # Needed for asio 
    if(WIN32) 
     target_link_libraries(foo wsock32 ws2_32) 
    endif() 

    target_link_libraries(foo ${Boost_LIBRARIES}) 
endif() 

I renderować projekt dla Visual Studio 2013 64-bit:

cmake -G "Visual Studio 12 Win64" -DBOOST_LIBRARYDIR=D:\Development\Tools\boost_1_57_0\stage\x64\lib ..\KServer 

Wyjście jest:

-- The C compiler identification is MSVC 18.0.31101.0 
-- The CXX compiler identification is MSVC 18.0.31101.0 
-- Check for working C compiler using: Visual Studio 12 2013 Win64 
-- Check for working C compiler using: Visual Studio 12 2013 Win64 -- works 
-- Detecting C compiler ABI info 
-- Detecting C compiler ABI info - done 
-- Check for working CXX compiler using: Visual Studio 12 2013 Win64 
-- Check for working CXX compiler using: Visual Studio 12 2013 Win64 -- works 
-- Detecting CXX compiler ABI info 
-- Detecting CXX compiler ABI info - done 
-- Boost version: 1.57.0 
-- Boost version: 1.57.0 
-- Found the following Boost libraries: 
-- system 
-- filesystem 
-- Boost found! 
-- Configuring done 
-- Generating done 
-- Build files have been written to: D:/Development/Private/C++/KServerProject 

To wszystko dobrze i dobrze.

Problem zaczyna się tutaj:

Kiedy mogę zmienić plik cmake używać:

set(Boost_USE_STATIC_LIBS OFF) 

I wtedy pojawia się następujący błąd w Visual Studio podczas budowania:

error LNK1104: cannot open file 'libboost_filesystem-vc120-mt-gd-1_57.lib' D:\Development\Private\C++\KServerProject\src\LINK foo 

Sprawdzanie Property Pages w studiu biblioteka jest dodawana jako zależność:

enter image description here

Podczas ręcznego dodawania folder D:\Development\Tools\boost_1_57_0\stage\x64\lib do Additional Library Directories Buduje porządku.

Jak mogę to zrobić, aby utworzyć projekt przy użyciu dynamicznych bibliotek?

+0

W mojej kompilacji doładowania, której używam z cmake, mam 3 foldery w katalogu głównym kompilacji. buduj, dołącz i lib. Chociaż buduję ze źródła. – drescherjm

+0

Używam następującego typu kompilacji z bjam '--build-type = complete stage install' – drescherjm

+0

To nie jest problem z doładowaniem. Zbudowałem z 'complete'. Potrzebuję projektu, używając boost do pracy z dynamicznym łączeniem podczas generowania za pomocą cmake. – Asken

Odpowiedz

12

wierzę trzeba dodać

add_definitions(-DBOOST_ALL_NO_LIB) 

Zobacz http://www.boost.org/doc/libs/1_57_0/libs/config/doc/html/index.html. Mam to ustawione w moim CMakeLists.txt i działa dla moich wizualnych buildów studyjnych z doładowaniem. Jako test usunąłem go i otrzymałem ten sam błąd, co ty.

Co jest warte, oto jak używam boost z cmake.

# boost 
set(Boost_NO_SYSTEM_PATHS true) 
set (Boost_USE_STATIC_LIBS OFF CACHE BOOL "use static libraries from Boost") 
set (Boost_USE_MULTITHREADED ON) 
find_package(Boost REQUIRED 
    COMPONENTS 
    system program_options thread filesystem 
    date_time chrono timer regex serialization 
) 
include_directories(${Boost_INCLUDE_DIRS}) 
link_libraries(${Boost_LIBRARIES}) 

if (WIN32) 
    # disable autolinking in boost 
    add_definitions(-DBOOST_ALL_NO_LIB) 

    # force all boost libraries to dynamic link (we already disabled 
    # autolinking, so I don't know why we need this, but we do!) 
    add_definitions(-DBOOST_ALL_DYN_LINK) 
endif() 
+0

WOW! to działa tak dobrze ......! Nie potrzebuję 'BOOST_ALL_DYN_LINK' w moim przypadku: https://github.com/lumenitb/vpercnode –