/ / CMake FindBoost за -mt-s библиотека суфикс - тласък, 64bit, cmake, знамена, nmame

CMake FindBoost за -mt-s библиотека суфикс - тласък, 64bit, cmake, флагове, nmake

Първо най-важното: Windows 7 x64, използвайки компилатор на Microsoft CL.exe за команден ред с CMake, правилно конфигуриран на командния ред на Visual Studio на amd64. Проведох няколко основни проблема (например, аз се опитвах да се свържа с споделеното, вместо със статичното Boost, се опитвах да се свържа с x86 Boost с x64 цел и т.н.) и сега, след като съм получил тези права, аз съм опитвайки се да обвивам главата си около знамената на CMake за Boost.

Имам идеята за различните номенклатури за Boost (като това, което означава -mt-gd). Моите Boost библиотеки са all-mt-s (Release multithreaded.)

Бих искал да знам коя променлива CMake за FindBoost съответства на наставките -g и -d.

Ето моите CMakeLists:

cmake_minimum_required( VERSION 2.8 )

project( echoserv )

set( APP_NAME Echoserv )
set( MAIN_SOURCE echoserv.cpp )
set( CMAKE_BUILD_TYPE "RELEASE" )

set( Boost_USE_STATIC_RUNTIME ON )
set( Boost_USE_STATIC_LIBS ON )
set( Boost_DEBUG ON )

find_package( Boost COMPONENTS system REQUIRED )

add_executable( ${APP_NAME} ${MAIN_SOURCE} )

include_directories( ${Boost_INCLUDE_DIR} )
link_directories( ${Boost_LIBRARY_DIRS} )
target_link_libraries( ${APP_NAME} ${Boost_LIBRARIES} )

Получената грешка, когато се опитвам да компилирам, е:

LINK : fatal error LNK1104: cannot open file "libboost_system-vc100-mt-gd-1_53.lib"

Това е така, защото моите Boost библиотеки са всички от формата "-vc100-mt-s-1_53.lib". И така, какви флагове да използвам, за да се свърже с -mt-s libs и да спре да се опитва да се свърже с -mt-gd?

ресурси:

http://www.boost.org/doc/libs/1_53_0/more/getting_started/windows.html#library-naming http://www.cmake.org/cmake/help/v2.8.8/cmake.html#module%3aFindBoost

Очевидно връзката cmake.org трябва да е от полза, но мисля, че поставям променливите правилно и все още се опитва да се свърже с mt-gd.

Редактиране: тук е изхода със зададена Boost_DEBUG ON:

(имайте предвид, че Boost библиотеките са инсталирани на% LIB%.)

E:fastmetadevworkspacepersonallearncppsocksechoserv>nmake

Microsoft (R) Program Maintenance Utility Version 10.00.30319.01
Copyright (C) Microsoft Corporation.  All rights reserved.

-- [ E:/fastmeta/dev/tools/cmake/CMake 2.8/share/cmake-2.8/Modules/FindBoost.cmake:566 ] _boost_TEST_VERSIONS = 1.56.0;1.56;1.55.0;1.55;1.54.0;1.54;1.53.0;1.53;1.52.0;1.52;1.51.0;1.51;1.50.0;1.50;1.49.0;1.49;1.48.0;1.48;1.47.0;1.47;1.46.1;1.46.0;1.46;1.45.0;1.45;1.44.0;1.44;1.43.0;1.43;1.42.0;1.42;1.41.0;1.41;1.40.0;1.40;1.39.0;1.39;1.38.0;1.38;1.37.0;1.37;1.36.1;1.36.0;1.36;1.35.1;1.35.0;1.35;1.34.1;1.34.0;1.34;1.33.1;1.33.0;1.33
-- [ E:/fastmeta/dev/tools/cmake/CMake 2.8/share/cmake-2.8/Modules/FindBoost.cmake:568 ] Boost_USE_MULTITHREADED = TRUE
-- [ E:/fastmeta/dev/tools/cmake/CMake 2.8/share/cmake-2.8/Modules/FindBoost.cmake:570 ] Boost_USE_STATIC_LIBS = ON
-- [ E:/fastmeta/dev/tools/cmake/CMake 2.8/share/cmake-2.8/Modules/FindBoost.cmake:572 ] Boost_USE_STATIC_RUNTIME = ON
-- [ E:/fastmeta/dev/tools/cmake/CMake 2.8/share/cmake-2.8/Modules/FindBoost.cmake:574 ] Boost_ADDITIONAL_VERSIONS =
-- [ E:/fastmeta/dev/tools/cmake/CMake 2.8/share/cmake-2.8/Modules/FindBoost.cmake:576 ] Boost_NO_SYSTEM_PATHS =
-- [ E:/fastmeta/dev/tools/cmake/CMake 2.8/share/cmake-2.8/Modules/FindBoost.cmake:644 ] Declared as CMake or Environmental Variables:
-- [ E:/fastmeta/dev/tools/cmake/CMake 2.8/share/cmake-2.8/Modules/FindBoost.cmake:646 ]   BOOST_ROOT =
-- [ E:/fastmeta/dev/tools/cmake/CMake 2.8/share/cmake-2.8/Modules/FindBoost.cmake:648 ]   BOOST_INCLUDEDIR =
-- [ E:/fastmeta/dev/tools/cmake/CMake 2.8/share/cmake-2.8/Modules/FindBoost.cmake:650 ]   BOOST_LIBRARYDIR =
-- [ E:/fastmeta/dev/tools/cmake/CMake 2.8/share/cmake-2.8/Modules/FindBoost.cmake:652 ] _boost_TEST_VERSIONS = 1.56.0;1.56;1.55.0;1.55;1.54.0;1.54;1.53.0;1.53;1.52.0;1.52;1.51.0;1.51;1.50.0;1.50;1.49.0;1.49;1.48.0;1.48;1.47.0;1.47;1.46.1;1.46.0;1.46;1.45.0;1.45;1.44.0;1.44;1.43.0;1.43;1.42.0;1.42;1.41.0;1.41;1.40.0;1.40;1.39.0;1.39;1.38.0;1.38;1.37.0;1.37;1.36.1;1.36.0;1.36;1.35.1;1.35.0;1.35;1.34.1;1.34.0;1.34;1.33.1;1.33.0;1.33
-- [ E:/fastmeta/dev/tools/cmake/CMake 2.8/share/cmake-2.8/Modules/FindBoost.cmake:734 ] location of version.hpp: C:/Program Files (x86)/Microsoft Visual Studio 10.0/VC/include/boost/version.hpp
-- [ E:/fastmeta/dev/tools/cmake/CMake 2.8/share/cmake-2.8/Modules/FindBoost.cmake:754 ] version.hpp reveals boost 1.53.0
-- [ E:/fastmeta/dev/tools/cmake/CMake 2.8/share/cmake-2.8/Modules/FindBoost.cmake:786 ] guessed _boost_COMPILER = -vc100
-- [ E:/fastmeta/dev/tools/cmake/CMake 2.8/share/cmake-2.8/Modules/FindBoost.cmake:796 ] _boost_MULTITHREADED = -mt
-- [ E:/fastmeta/dev/tools/cmake/CMake 2.8/share/cmake-2.8/Modules/FindBoost.cmake:839 ] _boost_RELEASE_ABI_TAG = -s
-- [ E:/fastmeta/dev/tools/cmake/CMake 2.8/share/cmake-2.8/Modules/FindBoost.cmake:841 ] _boost_DEBUG_ABI_TAG = -sgd
-- [ E:/fastmeta/dev/tools/cmake/CMake 2.8/share/cmake-2.8/Modules/FindBoost.cmake:884 ] _boost_LIBRARY_SEARCH_DIRS = C:/Program Files (x86)/Microsoft Visual Studio 10.0/VC/include/lib;C:/Program Files (x86)/Microsoft Visual Studio 10.0/VC/include/../lib;C:/Program Files (x86)/Microsoft Visual Studio 10.0/VC/include/stage/lib;C:/boost/lib;C:/boost;C:Program Files (x86)/boost/boost_1_53_0/lib;C:Program Files (x86)/boost/boost_1_53/lib;C:Program Files (x86)/boost/lib;C:Program Files (x86)/boost;/sw/local/lib
-- [ E:/fastmeta/dev/tools/cmake/CMake 2.8/share/cmake-2.8/Modules/FindBoost.cmake:962 ] Searching for SYSTEM_LIBRARY_RELEASE: libboost_system-vc100-mt-s-1_53;libboost_system-vc100-mt-s;libboost_system-mt-s-1_53;libboost_system-mt-s;libboost_system
-- [ E:/fastmeta/dev/tools/cmake/CMake 2.8/share/cmake-2.8/Modules/FindBoost.cmake:994 ] Searching for SYSTEM_LIBRARY_DEBUG: libboost_system-vc100-mt-sgd-1_53;libboost_system-vc100-mt-sgd;libboost_system-mt-sgd-1_53;libboost_system-mt-sgd;libboost_system-mt;libboost_system
-- [ E:/fastmeta/dev/tools/cmake/CMake 2.8/share/cmake-2.8/Modules/FindBoost.cmake:1108 ] Boost_FOUND = TRUE
-- Boost version: 1.53.0
-- Found the following Boost libraries:
--   system
-- Configuring done
-- Generating done
-- Build files have been written to: E:/fastmeta/dev/workspace/personal/learncpp/socks/echoserv
Linking CXX executable Echoserv.exe
LINK : fatal error LNK1104: cannot open file "libboost_system-vc100-mt-1_53.lib"

LINK failed. with 2
NMAKE : fatal error U1077: ""E:fastmetadevtoolscmakeCMake 2.8bincmake.exe
"" : return code "0xffffffff"
Stop.
NMAKE : fatal error U1077: ""C:Program Files (x86)Microsoft Visual Studio 10.0VCBINamd64nmake.exe"" : return code "0x2"
Stop.
NMAKE : fatal error U1077: ""C:Program Files (x86)Microsoft Visual Studio 10.0VCBINamd64nmake.exe"" : return code "0x2"
Stop.

Отговори:

1 за отговор № 1

В Windows няма начин да кажете на CMakeсамо ако откриете версиите за издаване на Boost, ако сте построили двете.А ако сте готови да изградите проекта си в Debug and Release, обикновено сте инсталирали Debug и Release версии на Boost, тъй като те всяка връзка към различни версии на библиотеката C Runtime; т.е. обикновено нямате само libboost_system-vc100-mt-s-1_53.lib, но също така и libboost_system-vc100-mt-sgd-1_53.lib в същата папка.

Така че с CMakeLists.txt, тъй като то е точно сега (ако се установи, че командата dir на boost е намерена правилно), стойността на ${Boost_LIBRARIES} трябва да е нещо като:

optimized;<path to boost root>/stage/lib/libboost_system-vc100-mt-s-1_53.lib;debug;<path to boost root>/stage/lib/libboost_system-vc100-mt-sgd-1_53.lib

Тогава, когато го направите target_link_libraries( ${APP_NAME} ${Boost_LIBRARIES} ) вие казвате коя версия на тласък lib да се свърже в зависимост от това дали е Debug или Release build.

Фактът, че VS търси libboost_system-vc100-mt-gd-1_53.lib, ме кара да мисля, че това може да не доведе до увеличаване на функцията за автоматично свързване. set(Boost_USE_STATIC_RUNTIME ON) line, CMake не трябва да търси дори libboost_system-vc100-mt-gd-1_53.lib.

Можете да изключите функцията за увеличаване на връзката чрез увеличаване, като добавите следния ред:

add_definitions(-DBOOST_ALL_NO_LIB)