Можно ли добавить внешний проект? - PullRequest
0 голосов
/ 18 февраля 2019

Я не совсем уверен, что externalproject_Add, как большинство примеров, которые я могу найти на нем, касается загрузки git и т. Д. / Но, может быть, вот и все ...

По сути, у меня есть:

FolderA // inherited project
> main.cpp
> CMakeList.txt
    > libFolder
        >someStuff.h
        >someStuff.cpp

FolderB // base project
> main.cpp
> CMakeList.txt
    > libFolder_Core
        >someStuff_Core.h
        >someStuff_Core.cpp

Я хочу, чтобы "не" приходилось собирать статическую / динамическую / и т. Д. Библиотеку каждый раз, когда я вносил изменения в проект в папке B, я просто хотел включить CMakeList.txt из этой папки в мою папку A, FolerB cmake имеет только что-токак

set(headers xx.h)
set(source xx.cpp)
set(all ${headers} ${source})

Просто ищу способ сказать в проекте A, cmake,

get_filename_component(libs"${CMAKE_CURRENT_SOURCE_DIR}/.." ABSOLUTE)
SET(coreLib ${libs}/someCoreLib/)
add_executable(name, main.cpp ${coreLib})

Возможно ли что-то подобное?

1 Ответ

0 голосов
/ 18 февраля 2019

Вы можете легко сделать это с помощью современного CMake, используя экспортированную цель и реестр пакетов.

В проекте A:

add_library(projecta a.cpp b.cpp c.cpp)
add_library(projecta::projecta ALIAS projecta)

target_include_directories(projecta PUBLIC ...)

install(TARGETS projecta EXPORT projectaTargets
  LIBRARY DESTINATION lib
  ARCHIVE DESTINATION lib
  RUNTIME DESTINATION bin
  INCLUDES DESTINATION include
)

install(
  EXPORT projectaTargets
  NAMESPACE projecta::
  FILE projectaConfig.cmake
  DESTINATION lib/cmake/projecta
)

export(
    EXPORT projectaTargets
    FILE "${CMAKE_CURRENT_BINARY_DIR}/projectaConfig.cmake"
)

export(PACKAGE projecta)

Это сделает цель для projecta и экспортируетцели для другого проекта, чтобы использовать их.

Если у самого проекта A есть зависимости, рассмотрите возможность экспорта целей в целевой файл, а затем создайте файл конфигурации, который также найдет пакет ваших зависимостей.Подробнее об этом в блоге Пора делать CMake Right .

Затем в проекте B:

find_package(projecta REQUIRED)

add_executable(projectb x.cpp y.cpp z.cpp)

# link project b to project a,
# adding include directories and link dependencies
target_link_libraries(projectb PUBLIC projecta::projecta)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...