Имеется основной CMakelists
ADD_SUBDIRECTORY(my_math_lib)
ADD_SUBDIRECTORY(parse_stream_lib)
ADD_SUBDIRECTORY(calculator)
и симейк листы субдеррикторий:
my_math_lib:
CMAKE_MINIMUM_REQUIRED(VERSION 2.8.9)
PROJECT(my_math)
INCLUDE_DIRECTORIES(include/my_math)
SET(HEADER_FILES
include/my_math/my_math.h)
SET(SOURCE_FILES
src/my_math.cpp)
ADD_LIBRARY(my_math STATIC ${SOURCE_FILES} ${HEADER_FILES})
SET(${PROJECT_NAME}_INCLUDE_DIRS
${PROJECT_SOURCE_DIR}/include
CACHE INTERNAL "${PROJECT_NAME}: Include Directories" FORCE)
parse_stream_lib:
CMAKE_MINIMUM_REQUIRED(VERSION 2.8.9)
PROJECT(parse_stream)
INCLUDE_DIRECTORIES(${my_math_INCLUDE_DIRS})
INCLUDE_DIRECTORIES(include/parse_stream)
SET(HEADER_FILES
include/parse_stream/parse_stream.h)
SET(SOURCE_FILES
src/parse_stream.cpp)
ADD_LIBRARY(parse_stream STATIC ${SOURCE_FILES} ${HEADER_FILES})
SET(${PROJECT_NAME}_INCLUDE_DIRS
${PROJECT_SOURCE_DIR}/include
CACHE INTERNAL "${PROJECT_NAME}: Include Directories" FORCE)
ADD_DEPENDENCIES(parse_stream my_math)
TARGET_LINK_LIBRARIES(parse_stream my_math)
calculator:
CMAKE_MINIMUM_REQUIRED(VERSION 2.8.9)
PROJECT(calculator)
INCLUDE_DIRECTORIES(${parse_stream_INCLUDE_DIRS})
SET(HEADER_FILES)
SET(SOURCE_FILES
src/calculator_main.cpp)
ADD_EXECUTABLE(calculator ${SOURCE_FILES} ${HEADER_FILES})
ADD_DEPENDENCIES(calculator parse_stream)
TARGET_LINK_LIBRARIES(calculator parse_stream)
calculator зависит от parse_stream, a parse_stream зависит от my_math.
Проект собирается и все работает, но как только я изменю порядок субдеррикторий в основном CMakeLists например сделаю :
ADD_SUBDIRECTORY(parse_stream_lib)
ADD_SUBDIRECTORY(my_math_lib)
ADD_SUBDIRECTORY(calculator)
то проект уже не собирается т.к. parse_stream не видит my_math.
Как исправить данную проблему? т.к. при большом проекте будет сложно и займет много времени выстраивать порядок субдирректорий по порядку их зависимостей
Проблему помогла решить статья https://habrahabr.ru/post/330902/ А именно 4 совет, который говорит что нужно использовать target_include_directories вместо include_directories для добавления путей поиска заголовков, от которых зависит цель.
И проект начинает собираться нормально независимо от порядкя субдеррикторий. Так же в этой статье в 4 совете имеется ссылка на хорошую презентацию о современном использовании CMake, которая будет полезна для дальнейшей работы с CMake.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Написал я маленькую программу, которая в свою очередь запускает другую программуИ мне нужно добавить первую программу в автозагрузу желательно...
Написал программу на c++В ней есть функции: запуск программы, добавление записи в реестр, цикл и пара функций, а также несколько поключенных...
Какая функция вернет положение управляющего элемента RECT{50,30,300,80}?
При отработке ajax-запроса странно работают методы hide и showНа долю секунды блоки, которые должны исчезать, еще висят и только потом с 'дерганием'...