У меня есть программа на C ++, которую я создаю с помощью функции оптимизации профиля Clang 3.9. Вот что должно произойти:
prof.raw
,llvm-profdata
преобразовать prof.raw
в новый файл, prof.data
,-fprofile-use=prof.data
,-fprofile-use
,У меня есть Gnu Makefile для этого, и он прекрасно работает. Моя проблема возникает сейчас, когда я пытаюсь портировать этот Makefile на CMake (3.7, но я могу обновить). Мне нужно решение для работы (по крайней мере) с генератором Makefiles Unix, но в идеале оно будет работать для всех генераторов.
В CMake я определил две исполняемые цели: foo-gen
а также foo-use
:
foo-gen
выполняется, это создает prof.raw
файл.add_custom_command
создать правило для создания prof.data
от prof.raw
,Моя проблема является то, что я не могу понять, как сказать CMake, что каждый из объектных файлов зависит от foo-use
имеет зависимость от файла prof.data
,
Самая многообещающая идея, которую я имел, состояла в том, чтобы (1) найти способ перечислить все .o
файлы, на которых foo-use
зависимости, а затем (2) перебрать каждый из этих .o
файлы, звонящие add_dependency
для каждого.
Проблема с этим подходом состоит в том, что я не могу найти идиоматический способ, в моем файле CMakeLists.txt, перечислить список объектных файлов, от которых зависит исполняемый файл. Это может быть открытой проблемой с CMake.
Я также подумал об использовании set_source_files_properties
установить OBJECT_DEPENDS
недвижимость на каждом из моих .cpp
файлы, используемые foo-use
, добавив prof.data
в список этого свойства.
Проблема с этим (AFAICT) заключается в том, что каждый из моих .cpp
файлы используются для создания двух разных .o
файлы: один для foo-gen
и один для foo-use
, Я хочу .o
файлы, которые связаны в foo-use
иметь эту зависимость во время компиляции от prof.data
; но .o
файлы, которые связаны в foo-gen
должен не иметь зависимость от времени компиляции prof.data
,
И AFAIK, set_source_files_properties
не позволяет мне установить OBJECT_DEPENDS
свойство иметь одно из двух значений, в зависимости от того, foo-gen
или же foo-use
текущая цель интереса.
Какие-нибудь предложения для чистого (ish) способа сделать эту работу?
Задача ещё не решена.
Других решений пока нет …