есть проект 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
работает как положено - скомпилировано только изменено.
Есть идеи, почему это так?
Я добавил полный текст включенного файла, потому что, если я закомментирую это,
все работает нормально, как и ожидалось