CMake: установить каталог для целевых источников - PullRequest
1 голос
/ 03 апреля 2019

У меня есть проект C ++, где все исходные файлы реализации (* .cpp) находятся в каталоге src в каталоге проекта.Некоторые файлы находятся в следующих подкаталогах.Допустим, в src / foo / есть 50 файлов.Мне нужно перечислить эти файлы как часть функции add_library и / или target_sources.

Теперь, куда бы вы ни смотрели, добавление всех файлов из каталога автоматически не приветствуется, что меня устраивает.Итак, я собираюсь перечислить все файлы вручную;но повторение общего префикса src / foo / 50 раз кажется действительно глупым и раздражающим.

В документации для target_sources говорится

Относительные пути к исходным файлам интерпретируются как относящиеся к текущему исходному каталогу (то есть CMAKE_CURRENT_SOURCE_DIR).

Итак, я добавил set(CMAKE_CURRENT_SOURCE_DIR "src/foo/") перед вызовом target_source, но это не сработало.(Я получаю сообщение об ошибке «Не удается найти исходный файл».)

Итак, как правильно достичь желаемого, если это вообще возможно?

NB: (общедоступные) заголовочные файлы(* .hpp) проекта находится в каталоге include (за пределами src ).Это хорошо настроено (без необходимости перечисления отдельных файлов) с помощью функции target_include_directories.

Ответы [ 2 ]

3 голосов
/ 03 апреля 2019

, но повторяя общий префикс src / foo / 50 раз

Просто добавьте префикс к источникам.

set(target_sources
    source1.c
    source2.c
)
list(TRANSFORM target_sources PREPEND "src/foo/")
0 голосов
/ 03 апреля 2019

Установка CMAKE_CURRENT_SOURCE_DIR в качестве относительной переменной к старому CMAKE_CURRENT_SOURCE_DIR не будет работать.Если для него установлено значение, то справедливо предположить, что удаление этого значения и использование пользовательского будет неправильным, потому что вы пропускаете то, что было установлено ранее.

Возможно, вы захотите установить его как абсолютноепуть, или используйте set(CMAKE_CURRENT_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/src/foo/"), или сделайте так много других людей и скопируйте и вставьте префикс все время.Это стандартная практика (которая также является одной из причин, по которой я до сих пор использую GLOB, потому что я ленивый), следование явному лучше, чем неявному (то есть смысл не использовать GLOB).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...