Суть, на самом деле, очень простая. Есть большой проект, который содержит по сути app_1 и app_2, которое наследуется от app_1. В проекте нужно сделать поддержку версионности, чтобы каждый app печатал свою версию, для этого сделаны хедер онли библиотеки (копипастой) для каждого app, куда просто в строковые константы (APP_1_VERSION и APP_2_VERSION) грузится версия с гита.
Структура проекта:
app_2
version
—->app_1
—->version
В папке version есть CMakeLists.txt следующего содержания [code]
cmake_minimum_required(VERSION 3.0) project(version)
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/version.hpp.in ${CMAKE_CURRENT_SOURCE_DIR}/version.hpp) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/version.json.in ${CMAKE_CURRENT_BINARY_DIR}/version.json)
add_library(${PROJECT_NAME} INTERFACE) target_sources(${PROJECT_NAME} INTERFACE ${CMAKE_CURRENT_SOURCE_DIR}/version.hpp)
[/code]
В другой папке версион тот же самый код, за исключением того, что там project(app_2_version)
Так вот, ПРОБЛЕМА, если я просто собираю app_1, то все нормально, если же я собираю app_2, которое триггерит сборку app_1, то он мне пишет
… …..app_1/main-app1.cpp…. error: ‘APP_1_VERSION’ was not declared in this scope; did you mean ‘APP_2_VERSION’? 68 | APP_1_VERSION.c_str())); | ^~~~~~~~~~~~~~~~~~~
И действительно, я чекаю, вот даже в vscode вот эта строчка #include <version/version.hpp> какого-то дьявола включает хедер с константами из app_2 Как я понимаю, ему там все пути расшарены и он выбирает включать то, что лежит выше
Короче гайс, кто шарит в cmake помогите, пожалуйста, как это сделать нормально, чтобы все работало, я пытался честно разбираться в cmake, интерфейсы там какие-то, паблик прайват, че-то там еще, по итогу толком ничего не понял, время идет, а решение нужно уже вот прям ЩАС или даже вчера
АААААА, хелп, 0 помощи (Папку переименовывать не предлагать) Если нужно ответить на какие-то уточняющие вопросы, то пишите, постараюсь быстро ответить (но я щас в галере сижу, так что не уверен, что прям мега быстро)