CMake — Переменная, полученная с помощью «get_target_property», установлена в -НЕ НАЙДЕНА

#cmake

Вопрос:

Я пытался понять это весь вчерашний день и до сегодняшнего дня пытаюсь настроить файл манифеста с именем файла плагина

В настоящее время у меня есть:

CMakeLists.txt:

 cmake_minimum_required(VERSION 3.12)

function(printv)
        foreach(var ${ARGN})
                message("${var} = ${${var}}")
        endforeach()
endfunction()

function(printenv)
        foreach(var ${ARGN})
                message("${var} = $ENV{${var}}")
        endforeach()
endfunction()

project(SimpleAmp VERSION 1.0 HOMEPAGE_URL https://jghfunrun.github.io/plugins/simple-amp)
set(PROJECT_URI ${PROJECT_HOMEPAGE_URL})

add_library(amp MODULE amp.c)

get_target_property(PLUGIN_FILE amp LIBRARY_OUTPUT_NAME)

printv(PLUGIN_FILE PROJECT_URI)

configure_file(manifest.ttl.in manifest.ttl)
configure_file(amp.ttl.in amp.ttl)
 

Manifest.ttl.in

 @prefix lv2:  <http://lv2plug.in/ns/lv2core#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .

<${PROJECT_URI}>
        a lv2:Plugin ;
        lv2:binary <${PLUGIN_FILE}> ;
        rdfs:seeAlso <amp.ttl> .
 

Однако lv2:binary линия становится

 lv2:binary <PLUGIN_FILE-NOTFOUND> ;
 

Я также попытался использовать строку set(PLUGIN_FILE $<TARGET_FILE_NAME:amp>) , но у нее не было шансов сработать, потому set что она вычисляется во время настройки, а выражения генератора вычисляются во время генерации

Ответ №1:

Я заставил его работать, вернувшись к заданному методу и добавив

 file(GENERATE
     OUTPUT
     ${CMAKE_CURRENT_BINARY_DIR}/manifest.ttl
     INPUT
     ${CMAKE_CURRENT_BINARY_DIR}/manifest.ttl.conf
     )
 

в промежутке между этими двумя configure_file » с » человек в Раздоре нашел это, что объясняет это