Подтвердить что ты не робот

CMAKE добавляет подкаталог, который не является подкаталогом в реальном каталоге

Возможно ли включить каталог для сиблинга в качестве подкаталога внутри cmake?

Что-то вроде

A 
  CMakeLists.txt

B
  CMakeLists.txt

и B включает A в качестве подкаталога?

4b9b3361

Ответ 1

Возможно, хотя, возможно, и не рекомендуется...

Вы можете использовать форму с двумя аргументами команды add_subdirectory, чтобы добавить любой каталог, который вы хотите, в качестве каталога "sub":

add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/../A ${CMAKE_CURRENT_BINARY_DIR}/A)

Второй аргумент формы с двумя аргументами указывает, куда помещать двоичный каталог для добавленного подкаталога.

Вам просто нужно быть осторожным, чтобы там не было другого реального подкаталога B, также называемого "A", а также add_subdirectory'd... Потому что, если вы это сделаете, тогда это будет ошибка, так как CMake не может иметь два разных каталога исходных каталогов в один и тот же каталог сборки.

Ответ 2

К сожалению, нет.

В качестве решения я могу предложить вам добавить add_subdirectory (A) и add_subdirectory (B) на верхнем уровне и установить vars, которые вы хотите экспортировать из A с PARENT_SCOPE. Это позволило бы B/CMakeLists.txt получить доступ к переменным, определенным в A/CMakeLists.txt