2015-03-05 15 views
7

Benim CMakeFiles.txt şuna benzer:Bağlama artırmak kütüphane

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() 

Ben projeyi işlemek Visual Studio 2013 64 bit:

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

çıktısı:

-- 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 

Bu hepsi iyi ve iyi.

Sorun burada başlar: Kullandığım benim cmake dosyasını değiştirdiğinizde

:

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

Kontrol Edilmesi:

set(Boost_USE_STATIC_LIBS OFF) 

Sonra Visual Studio zaman binayı aşağıdaki hatayı alıyorum Stüdyoda Property Pages kütüphanesi bağımlılık olarak eklenmiştir:

enter image description here

elle ince oluşturur D:\Development\Tools\boost_1_57_0\stage\x64\libAdditional Library Directories klasörü ekleme.

Dinamik libs kullanarak proje oluşturmak için nasıl alabilirim?

+0

Cmake ile kullandığım destek sistemimde yapının kökünde 3 klasör var. kurmak, dahil etmek ve lib. Her ne kadar kaynak yapıyorum. – drescherjm

+0

Aşağıdaki yapı tipini bjam '--build-type = complete stage install' ile kullanıyorum – drescherjm

+0

Bu bir sorun değil. Tamamladım. Cmake kullanarak oluştururken dinamik bağlantı ile çalışmak için destek kullanarak projeye ihtiyacım var. – Asken

cevap

12

Sana

add_definitions(-DBOOST_ALL_NO_LIB) 

http://www.boost.org/doc/libs/1_57_0/libs/config/doc/html/index.html Bkz eklemem gerekiyor inanıyoruz. CMakeLists.txt dosyasımda ayarlıyım ve görsel stüdyom için çalışıyorum. Bir test olarak, onu kaldırdım ve yaptığınız aynı hatayı aldım.

Değeri ne için, ben cmake ile destek nasıl kullanılır.

# 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! Bu çok iyi çalışıyor ...... Benim durumumda BOOST_ALL_DYN_LINK’a ihtiyacım yok: https://github.com/lumenitb/vpercnode –