Cmake генерирует неправильные пути включенияC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Cmake генерирует неправильные пути включения

Сообщение Anonymous »

При создании следующей настройки для liba и libb в зависимых проектах создаются следующие каталоги включения:
liba/include/liba и liba, а также libb/include/libb и libb
Однако правильными каталогами включения будут:
liba/include, а также libb/include
Я понятия не имею, почему он вообще генерирует корневой каталог как путь включения, который не имеет никакого смысла в первое место.
libX/include/libX будет правильным путем включения в libX, но не в зависимых проектах.
Как заставить cmake генерировать только нужные пути включения?
CMakeLists.txt:
cmake_minimum_required(VERSION 3.28)
project(TopLevel VERSION 1.0.0 LANGUAGES CXX)
set(CMAKE_VERBOSE_MAKEFILE TRUE)
cmake_policy(SET CMP0177 NEW)

include(FetchContent)

FetchContent_Declare(liba SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/liba" OVERRIDE_FIND_PACKAGE)
FetchContent_MakeAvailable(liba)

list(PREPEND CMAKE_PREFIX_PATH "${CMAKE_CURRENT_SOURCE_DIR}/libb/build/generators")
list(PREPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/libb/build/generators")
FetchContent_Declare(libb SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/libb" OVERRIDE_FIND_PACKAGE)
FetchContent_MakeAvailable(libb)

list(PREPEND CMAKE_PREFIX_PATH "${CMAKE_CURRENT_SOURCE_DIR}/app/build/generators")
list(PREPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/app/build/generators")
add_subdirectory(app)

liba/CMakeLists.txt:
cmake_minimum_required(VERSION 3.28)

set(PROJ_NS "liba")
set(PROJ_BIN_NAME "liba")

project(${PROJ_NS} VERSION 1.0.0 LANGUAGES CXX)
set(CMAKE_VERBOSE_MAKEFILE TRUE)
cmake_policy(SET CMP0177 NEW)

set(CXX_STANDARD_REQUIRED ON)
if(NOT DEFINED CMAKE_CXX_STANDARD OR CMAKE_CXX_STANDARD LESS 23)
set(CMAKE_CXX_STANDARD 23)
endif()

add_library(${PROJ_BIN_NAME} STATIC)
target_include_directories(${PROJ_BIN_NAME} PUBLIC $ $)

if (MSVC)
if(MSVC_VERSION GREATER_EQUAL 1914)
target_compile_options(${PROJ_BIN_NAME} PUBLIC "/Zc:__cplusplus")
target_compile_options(${PROJ_BIN_NAME} PUBLIC "/permissive-")
endif()
if(MSVC_VERSION GREATER_EQUAL 1934)
target_compile_options(${PROJ_BIN_NAME} PRIVATE /external:anglebrackets /external:W0)
endif()
endif()

# Actual source files
target_sources(${PROJ_BIN_NAME} PRIVATE
src/liba/helpers.cpp
)

# Public headers
target_sources(${PROJ_BIN_NAME} PUBLIC FILE_SET pub_headers TYPE HEADERS FILES
include/liba/helpers.hpp
)

# === Installation ===
install(TARGETS ${PROJ_BIN_NAME} LIBRARY)
install(TARGETS ${PROJ_BIN_NAME} FILE_SET pub_headers)

libb/CMakeLists.txt
cmake_minimum_required(VERSION 3.28)

set(PROJ_NS "libb")
set(PROJ_BIN_NAME "libb")

project(${PROJ_NS} VERSION 1.0.0 LANGUAGES CXX)
set(CMAKE_VERBOSE_MAKEFILE TRUE)
cmake_policy(SET CMP0177 NEW)

set(CXX_STANDARD_REQUIRED ON)
if(NOT DEFINED CMAKE_CXX_STANDARD OR CMAKE_CXX_STANDARD LESS 23)
set(CMAKE_CXX_STANDARD 23)
endif()

add_library(${PROJ_BIN_NAME})

target_include_directories(${PROJ_BIN_NAME} PUBLIC $ $)

find_package(nlohmann_json REQUIRED)
find_package(Microsoft.GSL REQUIRED)
find_package(liba REQUIRED)

target_link_libraries(${PROJ_BIN_NAME} PRIVATE nlohmann_json::nlohmann_json)
target_link_libraries(${PROJ_BIN_NAME} PRIVATE Microsoft.GSL::GSL)
target_link_libraries(${PROJ_BIN_NAME} PRIVATE liba)

if (MSVC)
if(MSVC_VERSION GREATER_EQUAL 1914)
target_compile_options(${PROJ_BIN_NAME} PUBLIC "/Zc:__cplusplus")
target_compile_options(${PROJ_BIN_NAME} PUBLIC "/permissive-")
endif()
if(MSVC_VERSION GREATER_EQUAL 1934)
target_compile_options(${PROJ_BIN_NAME} PRIVATE /external:anglebrackets /external:W0)
endif()
endif()

# Actual source files
target_sources(${PROJ_BIN_NAME} PRIVATE
src/libb/test.cpp
)

# Public headers
target_sources(${PROJ_BIN_NAME} PUBLIC FILE_SET pub_headers TYPE HEADERS FILES
include/libb/test.hpp
)

# === Installation ===
install(TARGETS ${PROJ_BIN_NAME} LIBRARY)
install(TARGETS ${PROJ_BIN_NAME} FILE_SET pub_headers)


app/CMakeLists.txt:
cmake_minimum_required(VERSION 3.28)

project(App VERSION 1.0.0 LANGUAGES CXX)
set(PROJ_BIN_NAME "App")
set(CMAKE_VERBOSE_MAKEFILE TRUE)

set(CXX_STANDARD_REQUIRED ON)
if(NOT DEFINED CMAKE_CXX_STANDARD OR CMAKE_CXX_STANDARD LESS 23)
set(CMAKE_CXX_STANDARD 23)
endif()

add_executable(${PROJ_BIN_NAME})

find_package(nlohmann_json REQUIRED)
target_link_libraries(${PROJ_BIN_NAME} PRIVATE nlohmann_json::nlohmann_json)

find_package(liba REQUIRED)
find_package(libb REQUIRED)
target_link_libraries(${PROJ_BIN_NAME} PRIVATE liba)
target_link_libraries(${PROJ_BIN_NAME} PRIVATE libb)

if (MSVC)
if(MSVC_VERSION GREATER_EQUAL 1914)
target_compile_options(${PROJ_BIN_NAME} PUBLIC "/Zc:__cplusplus")
target_compile_options(${PROJ_BIN_NAME} PUBLIC "/permissive-")
endif()
if(MSVC_VERSION GREATER_EQUAL 1934)
target_compile_options(${PROJ_BIN_NAME} PRIVATE /external:anglebrackets /external:W0)
endif()
endif()

# Actual source files
target_sources(${PROJ_BIN_NAME} PRIVATE
src/main.cpp
)



Подробнее здесь: https://stackoverflow.com/questions/793 ... lude-paths
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Cmake генерирует неправильные пути включения
    Anonymous » » в форуме C++
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous
  • Cmake генерирует неправильные флаги для Clang-Cl
    Anonymous » » в форуме C++
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous
  • Cmake генерирует неправильные флаги для Clang-Cl
    Anonymous » » в форуме C++
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous
  • Cmake генерирует неправильные флаги для Clang-Cl: Undefined MainCrtStartup [Duplicate]
    Anonymous » » в форуме C++
    0 Ответы
    7 Просмотры
    Последнее сообщение Anonymous
  • Почему JAVAC генерирует каталоги пакетов при использовании пути -D и не генерирует эти каталоги, когда не использует -d
    Anonymous » » в форуме JAVA
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C++»