У меня есть пакет libtorch
, который зависит от библиотек, использующих ключевое слово slots
для некоторых функций (например, в Aten
). А пока проект, который я использую, основан на Qt, в котором slots
используется как специальное ключевое слово (макрос), которое затем мешает torchlib
.
Решение избежать такого вмешательства состоит в том, чтобы добавить определение QT_NO_KEYWORDS
при импорте внешней библиотеки, которая конфликтует с Qt: Включение no_keyword (опция Qt) в файле cmake для работы с boost::signals
Затем это нужно сделать только для кода, который зависит от libtorch
, а не от остального, поэтому я попробовал несколько способов добавить его, например CMake Добавить и удалить определение макроса для компиляции общей библиотеки/исполняемого файла и Добавить целевые свойства в существующую импортированную библиотеку в CMake, но я не могу заставить ее Работа.
target_compile_definitions
кажется доступным после cmake 3.11 для ИМПОРТНЫХ целей (по терминологии cmake).
Итак, почему следующий экстракт cmakelist не работает? (в этом случае обычный код слотов QT не распознается должным образом как макрос):
find_package (Torch REQUIRED PATHS ${Torch_DIR})
add_executable( ${PROJECT_NAME} ${header_files} ${source_files} ${hpp_files} ${moc_list} ${generated_ui_files} ${generated_qrc_files} )
target_link_libraries(${PROJECT_NAME} ${Qt_LINK_LIBRARIES})
#add_definitions(-DQT_NO_KEYWORDS)
target_link_libraries(${PROJECT_NAME} ${TORCH_LIBRARIES})
#remove_definitions(-DQT_NO_KEYWORDS)
target_compile_definitions(torch INTERFACE QT_NO_KEYWORDS)