основанный на cmake проект перестраивает современные файлы - PullRequest
0 голосов
/ 15 января 2019

есть проект cmake, который использует mongoc / mongocxx / mangrove, которые добавлены как внешние проекты (отдельный скрипт включен в cmakelists.txt):

cmake_minimum_required(VERSION 3.10)

include(ExternalProject)

set(EXTERNAL_INSTALL_LOCATION ${CMAKE_BINARY_DIR}/external)

# mongo-c-driver
ExternalProject_Add(mongo-c-driver
        GIT_REPOSITORY https://github.com/mongodb/mongo-c-driver.git
        GIT_TAG r1.13-debian
        CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${EXTERNAL_INSTALL_LOCATION} -DENABLE_AUTOMATIC_INIT_AND_CLEANUP=OFF
        UPDATE_DISCONNECTED TRUE
        )
include_directories(${EXTERNAL_INSTALL_LOCATION}/include/libbson-1.0
        ${EXTERNAL_INSTALL_LOCATION}/include/libmongoc-1.0)
link_directories(${EXTERNAL_INSTALL_LOCATION}/lib)

# mongo-cxx-driver
ExternalProject_Add(mongo-cxx-driver
        GIT_REPOSITORY https://github.com/mongodb/mongo-cxx-driver.git
        GIT_TAG releases/stable
        CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${EXTERNAL_INSTALL_LOCATION} -DCMAKE_CXX_STANDARD=17 -DBSONCXX_POLY_USE_MNMLSTC=1.
        UPDATE_DISCONNECTED TRUE
        )
ExternalProject_Add_StepDependencies(mongo-cxx-driver build mongo-c-driver)
include_directories(${EXTERNAL_INSTALL_LOCATION}/include/bsoncxx/v_noabi
        ${EXTERNAL_INSTALL_LOCATION}/include/mongocxx/v_noabi)
link_directories(${EXTERNAL_INSTALL_LOCATION}/lib)

#                 mangrove
ExternalProject_Add(mangrove
        GIT_REPOSITORY https://github.com/amigo421/mangrove.git
        CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${EXTERNAL_INSTALL_LOCATION}
        UPDATE_DISCONNECTED TRUE
        )

ExternalProject_Add_StepDependencies(mangrove build mongo-c-driver mongo-cxx-driver)

include_directories(${EXTERNAL_INSTALL_LOCATION}/include/mangrove/v_noabi
        ${EXTERNAL_INSTALL_LOCATION}/include/boson/v_noabi
        )
link_directories(${EXTERNAL_INSTALL_LOCATION}/lib)

Основной скрипт (упрощенная версия) выглядит так:

...
include(AddMongo)

add_executable(
        myproject
        main.cpp
        webclient.cpp
        bot.cpp
        #here are a required headers       
        ../othersources/settings.cpp
        ../othersources/restapi.cpp
)

add_dependencies(myproject mangrove mongo-cxx-driver  )
target_link_libraries(myproject
        Qt5::Core
        Qt5::Network
        Qt5::Positioning
        Qt5::Test Qt5::Widgets
        mongocxx
        bsoncxx
        boson
        )

, поэтому этот проект всегда компилирует файлы main.cpp webclient.cpp bot.cpp даже они актуальны.

выглядит странно, но файлы

.. / othersources / settings.cpp

.. / othersources / restapi.cpp

работает как положено - скомпилировано только изменено.

Есть идеи, почему это так? Я добавил полный текст включенного файла, потому что, если я закомментирую это, все работает нормально, как и ожидалось

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...