Задача стояла следующая. Есть кроссплатформенный проект на C++ (назовем его, к примеру, boost_test), который использует библиотеки boost (для примера, boost-filesystem). Используемый компилятор - gcc. Необходимо сформировать файл CMakeLists.txt, обеспечив статическое связывание проекта с нужными библиотеками boost и gcc в среде windows и динамическое в GNU/Linux. А заодно и освоить cmake, к которому давно приглядывался.
В результате, CMakeLists.txt получился следующим.
Вдогонку, привожу несколько ссылок с неплохим, на мой взгляд, введением в cmake:
В результате, CMakeLists.txt получился следующим.
cmake_minimum_required(VERSION 2.8)
project(boost_test)
set(APP_NAME boost_test)
set(CMAKE_BUILD_TYPE RELEASE)
aux_source_directory(src SRC_LIST)
set(CMAKE_CXX_FLAGS "-std=c++11 -Wall -W -pedantic")
if(MINGW)
set(Boost_USE_STATIC_LIBS ON)
set(Boost_USE_SHARED_LIBS OFF)
else()
set(Boost_USE_STATIC_LIBS OFF)
set(Boost_USE_SHARED_LIBS ON)
endif()
find_package(Boost COMPONENTS system filesystem REQUIRED)
if(Boost_FOUND)
include_directories(${Boost_INCLUDE_DIR})
endif()
if(MINGW)
set(BUILD_STATIC_LIBS ON)
set(BUILD_SHARED_LIBS OFF)
set(CMAKE_EXE_LINKER_FLAGS "-static-libgcc -static-libstdc++ -static")
else()
set(BUILD_STATIC_LIBS OFF)
set(BUILD_SHARED_LIBS ON)
endif()
add_executable(${PROJECT_NAME} ${SRC_LIST})
target_link_libraries(
${PROJECT_NAME}
${Boost_SYSTEM_LIBRARY}
${Boost_FILESYSTEM_LIBRARY}
${Boost_LIBRARIES}
)
Вдогонку, привожу несколько ссылок с неплохим, на мой взгляд, введением в cmake:
- http://habrahabr.ru/post/155467/
- http://knzsoft.blogspot.ru/2012/04/cmakelisttxt.html
- http://www.devexp.ru/2010/01/sborka-proektov-s-cmake-vvedenie/
Хм.. И почему вот эти последние заметки не попались мне до того, как я закончил свой конфиг? Было бы куда проще, черт возьми )