Есть ли LINK_DIRECTORIES или эквивалентное свойство в CMake?

Я создал проект с большим количеством команд link_directories(). Теперь я хотел бы сохранить результирующую строку каталогов в переменной. Для include_directories() это легко использовать

get_property( test_INCLUDE_DIRECTORIES TARGET test PROPERTY INCLUDE_DIRECTORIES )

однако, похоже, что нет свойства LINK_DIRECTORIES, чтобы сделать

get_property( test_LINK_DIRECTORIES TARGET test PROPERTY LINK_DIRECTORIES )

Есть ли способ получить список каталогов ссылок, используемых для цели?

(Примечание: я понимаю, что могу вручную отследить каталоги ссылок в переменной, а затем использовать один link_directories(), но он не выглядит очень чистым)

1 ответ

Решение

Посмотрите на LINK_DIRECTORIES свойство каталога.

Дело в том, что link_directories работает для каждого каталога (команда влияет на все цели, определенные в тех же CMakeLists, а также цели из всех его подкаталогов), в отличие, например, от target_include_directories который работает на основе цели.

Вы можете запросить значение свойства с помощью:

get_property(test_LINK_DIRECTORIES DIRECTORY PROPERTY LINK_DIRECTORIES)

если вызывается из того же каталога, что и link_directories вызов. В противном случае вам нужно указать (полный или относительный) путь в качестве дополнительного аргумента после DIRECTORY, К сожалению, я не знаю способа получить соответствующий каталог для существующей цели.

Обратите внимание, что в целом использование link_directories не рекомендуется в CMake, что, вероятно, является основной причиной, по которой он не очень хорошо поддерживается. Если у вас нет веских причин не делать этого, всегда следует придерживаться полного пути к библиотеке, переданного target_link_libraries, Это избавит вас от многих головных болей в долгосрочной перспективе.

Другие вопросы по тегам