Внешний проект создается CMake и устанавливается в каталог, видимый через CMAKE_PREFIX_PATH
.Поскольку это проект CMake, он устанавливает правильные .cmake
файлы.В этих автоматически сгенерированных файлах создается цель EXPORTED
и устанавливаются все необходимые свойства.
Что я хотел бы сделать, это - без изменения оригинала CMakeLists.txt
- добавить определение компиляции, чтобыМне нужно для того, чтобы правильно включить заголовок из этой библиотеки.
До сих пор я пробовал два подхода:
Повторно добавить библиотеку и указать определения обычно
add_library(_external_lib_name_ INTERFACE IMPORTED)
target_compile_definitions(_external_lib_name_ INTERFACE FOO_BAR)
Это не работает, поскольку все уже установленные свойства цели (например, включающие каталоги) игнорируются.
Просто добавьте определения
target_compile_definitions(_external_lib_name_ INTERFACE FOO_BAR)
На этот раз CMake жалуется:
CMake Error at foo.cmake:1 (target_compile_definitions):
Cannot specify compile definitions for target "_external_lib_name_" which is not built by this project.
В настоящее время я думаю о цели прокси:
add_library(_proxy_target_ INTERFACE)
target_link_libraries(_proxy_target_ INTERFACE _external_lib_name_)
target_compile_definitions(_proxy_target_ INTERFACE FOO_BAR)
Хотя это может сработать, кто-нибудь знает, есть ли лучший способизменения импортированных целей?
Обновление :
Используя ответ Цыварева, я смог заставить его работать, но есть другая проблема: для того, чтобы цель была должным образоммодифицированный, мне нужно include
файл тСначала шляпа find_package
, а потом set_property
.Если я не использую include
, но стандартные CMakeLists.txt
и add_subdirectory
, цель содержит старые свойства.