У меня есть цель с именем Foo.Compile
, которая создает мою основную программу.
add_executable(Foo.Compile ...)
Затем у меня есть целевая утилита с именем Foo.Process
, которая зависит от того, какой исполняемый файл уже был собран, и выполняет некоторые действия.
add_custom_target(Foo.Process)
add_dependencies(Foo.Process Foo.Compile)
Но я хочу, чтобы это работало только в сборке релиза, потому что это медленно. Поэтому я создаю новую цель под названием Foo
, которую фактически строит пользователь. В сборке релиза это должно зависеть от Foo.Process
, но в других конфигурациях не должно. Поэтому я подумал, что смогу сделать это:
add_custom_target(Foo)
add_dependencies(Foo $<$<CONFIG:Release>:Foo.Process>)
Но это дает мне ошибку:
The dependency target "$<$<CONFIG:Release>:Foo.Process>" of
target "Foo" does not exist.
Кажется, проблема в том, что add_dependencies
не поддерживает выражения генератора, поэтому я подумал, что просто буду использовать target_link_libraries
, что, я знаю, делает. Но тогда возникает ошибка, что вы не можете использовать target_link_libraries
с служебным проектом.
Обратите внимание, что я не могу использовать if (CMAKE_BUILD_TYPE == Release)
, потому что мне нужно поддерживать мультиконфигурационные генераторы, такие как Visual Studio, поэтому я думаю, что мне нужно использовать выражение генератора.
Что мне делать?