************ ARRRRGGGGHHHHH ************
Пожалуйста, проголосуйте за ответ Мата.
Переменные среды учитываются при запуске кода.
Это одно предложение, очевидно, отсутствует в КАЖДОМ документе, который я прочитал о том, как переместить вывод!
ФактическиПозвольте мне немного расширить этот ответ.
GCOV_PREFIX - это время выполнения - в зависимости от времени создания переменной среды и определяет корневой каталог, в котором находятся выходные файлы gcov (* .gcda).) записаны.
GCOV_PREFIX_STRIP = X также является переменной времени выполнения и имеет эффект удаления элементов X из пути, найденного в объектных файлах (строки XXXX.o)
Что это означаетis:
Когда вы строите свой проект, объектные файлы записываются с полным путем к местоположению каждого исходного файла, отвечающего за каждый вложенный в них объектный файл.
Итак, представьте, что вынаписание исполняемого файла MyAppи библиотека MyLib в структуре директории, подобной этой:
/MyProject
|-MyApp
|--MyLib
Обратите внимание, что MyLib - это подкаталог MyApp
Допустим, MyApp имеет 2 исходных файла, а MyLib имеет 3
После сборки с флагом «-coverage» вы сгенерируете 5 файлов .gcno, по 1 для каждого объектного файла.
Встраиваемые в .o файлы для MyApp будут иметь абсолютный путь ** / MyProject /MyApp / ** a_source_file.cpp Точно так же в файлах .o для MyLib будет указан путь ** / MyProject / MyApp / MyLib / ** another_source_file.cpp
Теперь предположим, что вы похожи на меняи переместите эти файлы на совершенно другой компьютер с другой структурой каталогов, из которой они были созданы.В моем случае целевая машина на самом деле совершенно другой архитектуры.Я развертываю в / some / deploy / path not / MyProject на этом компьютере.
Если вы просто запустите приложение, gcov data попытается записать соответствующие файлы .gcda в / MyProject / MyApp и / MyProject / MyApp /MyLib для каждого объектного файла в вашем проекте, потому что это путь, указанный в файлах .o, и, в конце концов, MyApp и MyLib - это просто коллекции файлов .o, заархивированных вместе, с некоторыми другими средствами для исправления указателей функций и прочего.
Скорее всего, эти каталоги не существуют, и вы, вероятно, не работаете от имени пользователя root (не так ли), поэтому эти каталоги также не будут созданы.Оооо ... вы не увидите никаких gcda-файлов в месте развертывания /my/deploy/path.
Это совершенно сбивает с толку, верно!?! ??!?!?!?
Вот где вступают GCOV_PREFIX и GCOV_PREFIX_STRIP.
(BAM! Кулак бьет по лбу) Вам нужно указать **** время выполнения ****, что встроенный путь в .o-файлах не совсем то, что выхочу.Вы хотите «удалить» часть пути и заменить его каталогом развертывания.
Итак, вы устанавливаете каталог развертывания через GCOV_PREFIX = / some / deploy / path и хотите удалить / MyProjectиз сгенерированных путей .gcda, чтобы вы установили GCOV_PREFIX_STRIP = 1
С этими двумя установленными переменными среды вы запустите свое приложение и затем посмотрите в / some / deploy / path / MyApp и / some / deploy / path / MyApp/ MyLib, и вот, чудом появляются 5 gcda-файлов, по одному на каждый объектный файл.
Примечание: проблема усложняется, если вы делаете из исходных сборок..O указывает на источник, но gcda будет записан относительно каталога сборки.