2016-10-31 4 views
1

Я пытаюсь использовать библиотеку Boost CPP в Mac OS X 10.11.6. Я загрузил версию Boost версии 1.62 из официального репозитория SourceForge. Извлечен и построен в соответствии с документами: http://www.boost.org/doc/libs/1_62_0/more/getting_started/unix-variants.htmlC++, Mac OS X, Xcode 8: Compile Boost: установка цели развертывания в OS X 10.11

В принципе, я пошел в каталог и запускал сценарии «bootstrap.sh» и «b2».

Затем я создал простую программу на C++:

#include <iostream> 
#include <string> 

#include <boost/algorithm/string.hpp> 
#include <boost/regex.hpp> 

int main() { 
    std::string str1(" hello world! "); 
    boost::to_upper(str1); 

    std::cout << str1 << std::endl; 

    std::string s = " Boost Libraries "; 
    boost::regex expr{"\\s"}; 
    std::string fmt{"_"}; 
    std::cout << boost::regex_replace(s, expr, fmt) << '\n'; 

    return 0; 
} 

И попытался построить его с помощью следующего CMake файла

cmake_minimum_required(VERSION 2.8.9) 

set(CMAKE_CXX_FLAGS "-std=c++11 -stdlib=libc++") 

project(app_project) 

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

find_package(Boost 1.62.0 COMPONENTS regex) 

if(Boost_FOUND) 
    include_directories(${Boost_INCLUDE_DIRS}) 
    add_executable(myapp main.cpp) 
    target_link_libraries(myapp ${Boost_LIBRARIES}) 
endif() 

Когда я делаю программу я получаю следующие предупреждения:

ld: warning: object file (/Users/pritam/opt/boost_1_62_0/stage/lib/libboost_regex.a(instances.o)) was built for newer OSX version (10.12) than being linked (10.11) 
ld: warning: object file (/Users/pritam/opt/boost_1_62_0/stage/lib/libboost_regex.a(regex.o)) was built for newer OSX version (10.12) than being linked (10.11) 
ld: warning: object file (/Users/pritam/opt/boost_1_62_0/stage/lib/libboost_regex.a(regex_traits_defaults.o)) was built for newer OSX version (10.12) than being linked (10.11) 
ld: warning: object file (/Users/pritam/opt/boost_1_62_0/stage/lib/libboost_regex.a(regex_raw_buffer.o)) was built for newer OSX version (10.12) than being linked (10.11) 
ld: warning: object file (/Users/pritam/opt/boost_1_62_0/stage/lib/libboost_regex.a(cpp_regex_traits.o)) was built for newer OSX version (10.12) than being linked (10.11) 
ld: warning: object file (/Users/pritam/opt/boost_1_62_0/stage/lib/libboost_regex.a(static_mutex.o)) was built for newer OSX version (10.12) than being linked (10.11) 

У меня установлен XCode 8 на этой машине. Похоже, что при создании Boost он устанавливает цель развертывания в OS X 10.12.

Так что вопрос:

Как я могу установить цель развертывания для OS X 10.11 при построении подталкивания?

ответ

1

Чтобы настроить минимальную версию OSX ниже текущей версии OSX, которую вы строите, вам необходимо установить опцию -mmacosx-version-min. Следовательно, если вы использовали toolset=darwin вам нужно будет строить, как:

b2 macosx-version-min=10.11 ... 

Поскольку этот набор инструментов имеет специальную обработку мин версии OSX. Или, если вы использовали toolset=clang, то вам необходимо построить как:

b2 cflags=-mmacosx-version-min=10.11 cxxflags=-mmacosx-version-min=10.11 mflags=-mmacosx-version-min=10.11 mmflags=-mmacosx-version-min=10.11 linkflags=-mmacosx-version-min=10.11 ...