CMake: не удается увидеть исходные файлы в подкаталогах [duplicate]

В Java все находится в форме класса.

Если вы хотите использовать любой объект, тогда у вас есть две фазы:

  1. Объявить
  2. Инициализация

Пример:

  • Объявление: Object a;
  • Инициализация: a=new Object();

То же самое для концепции массива

  • Объявление: Item i[]=new Item[5];
  • Инициализация: i[0]=new Item();

Если вы не дают секцию инициализации, тогда возникает NullpointerException.

56
задан danijar 16 July 2015 в 10:55
поделиться

1 ответ

Как указано в документации команды set , каждый каталог, добавленный с помощью add_subdirectory или каждой функции, объявленной с помощью function, создает новую область.

Новый ребенок scope наследует все определения переменных из своей родительской области. Переменные назначения в новой дочерней области с помощью команды set будут видны только в области дочерних элементов, если не используется опция PARENT_SCOPE.

Чтобы сделать назначение SOURCEFILES видимым в корневой папке вашего проекта, попробуйте:

set (SOURCEFILES main.cpp foo.cpp PARENT_SCOPE) 
87
ответ дан Edgar Rokjān 19 August 2018 в 01:20
поделиться
  • 1
    Спасибо, это решило это. Но еще одно примечание: в подкаталоге теперь вы используете ${CMAKE_CURRENT_SOURCE_DIR}/foo.cpp вместо foo.cpp, потому что cmake теперь находится в родительской области. – blubberbernd 31 July 2011 в 19:56
  • 2
    В качестве альтернативы вы можете установить переменную в родительском файле CMakeLists.txt перед вызовом add_subdirectory и наследовать ее определение до дочернего файла CMakeLists. Опять же, вам нужно будет квалифицировать имена файлов, если вам нужно ссылаться на них из нескольких файлов CMakeLists. – DLRdave 1 August 2011 в 13:32
  • 3
    Вам нужно будет создать переменную в текущей области, чтобы использовать ее значения в функции sub-dir /: set(VAR value PARENT_SCOPE); set(VAR ${VAR}); – Patrick B. 10 September 2012 в 10:32
  • 4
    @PatrickB. в моем случае set(VAR value PARENT_SCOPE); set(VAR ${VAR}); не работает, однако set(VAR value); set(VAR ${VAR} PARENT_SCOPE); работает. – Deqing 5 February 2013 в 12:12
  • 5
    Additonaly вы можете получить доступ от родительского каталога к определенной переменной в suddir, как это get_directory_property(VAR1 DIRECTORY subdir1 DEFINITION VAR1) – Maxim Suslov 18 May 2016 в 07:31
Другие вопросы по тегам:

Похожие вопросы: