2015-11-24 4 views
2

У меня есть структура каталогов следующим образом:Родственные каталоги в CMake

root 
    libA 
    CMakeLists.txt 
    ClassA.cpp 
    libB 
    CMakeLists.txt 
    ClassB.cpp 
    sharedCode 
    enums.h 
    AbstractClass.h 

В CMake файл как может включать в себя каталог sharedCode? Так что как classA (в libA), так и classB (в libB) могут использовать enums.h и AbstractClass.h?

В CMakeLists.txt я попытался с помощью:

add_subdirectory(../sharedCode) 

но дает ошибку

add_subdirectory not given a binary directory but the given source 
    directory "/root/sharedCode" is not 
    a subdirectory of "root/libA". When 
    specifying an out-of-tree source a binary directory must be explicitly 
    specified. 
+1

Даже если вы решите данную ошибку, добавив параметр двоичной директории, ваш каталог 'sharedCode', похоже, не имеет собственного' CMakeLists.txt' (который, возможно, был бы излишним, если он содержит только заголовки) , Поэтому я бы просто сделал 'include_directories (../ sharedCode)'. – Florian

+1

Он может включать файлы cpp –

+0

Хорошо, тогда у вас есть аналогичная структура каталогов, которая у меня есть в одном из моих проектов. Более подробную информацию о возможных решениях CMake, отражающих вашу настройку, см., Например, [CMake: как установить зависимости Source, Library и CMakeLists.txt?] (Http://stackoverflow.com/questions/31512485/cmake-how-to-setup-source-library-and-cmakelists-txt-dependencies) или [Библиотека разделов CMake с несколькими исполняемыми файлами] (http://stackoverflow.com/questions/33443164/cmake-share-library-with-multiple-executables) – Florian

ответ

2

Как говорит ошибка при указании каталога относительно источника за пределами текущего дерева, вам должен также предоставить 2-й аргумент, который указывает каталог, в который будет помещен полученный двоичный файл.

Here's the documentation для add_subdirectory:

binary_dir определяет каталог, в который следует поместить выходные файлы. Если это относительный путь, он будет оцениваться по отношению к текущему каталогу вывода, но он также может быть абсолютным путем. Если binary_dir не указан, будет использоваться значение source_dir, прежде чем расширять любой относительный путь (типичное использование). Файл CMakeLists.txt в указанном исходном каталоге будет немедленно обработан CMake до того, как обработка в текущем файле ввода будет продолжена за пределами этой команды.

+0

Я прочитал ошибку, поскольку вы не можете указать источник из дерева каталог, только двоичный каталог из дерева. –

+0

Почему мне нужно предоставить второй аргумент, я понял, что это был подкаталог, но я просто добавил add_subdirectory (../ sharedCode ../sharedCode), и он работал –

Смежные вопросы