Я пытаюсь выполнить настройку, как описано в моем предыдущем вопросе: Есть ли способ проанализировать предварительно обработанный источник с помощью внешнего инструмента перед его компиляцией?
Все мои файлы .cpp настроены на компиляцию с / p, который генерирует .i (предварительно обработанные) файлы для всех из них, но без объектных файлов. Эти сгенерированные файлы .i также добавляются в мой проект, и для моего инструмента устанавливается опция внешнего инструмента сборки, которая изменяет эти файлы и сохраняет их под новым расширением .obfuscated.cpp.
Все эти файлы .obfuscated.cpp также добавляются в проект и настраиваются для нормальной компиляции, создавая объектные файлы.
Теперь проблема в том, что Visual Studio (или компоновщик, кто-то из них) по какой-то причине хочет получить файлы obj как из файлов .cpp (которые теперь просто сохраняются в файлы .i, без создания объектных файлов), так и из .obfuscated.cpp (которые создаются нормально).
Я бы предположил, что компоновщику не потребуются файлы .obj из источников, которые настроены для компиляции с параметром / P, поскольку этот параметр предотвращает создание объектных файлов.
Теперь я вижу только два пути решения этой проблемы:
1) Выполните сборку в два этапа. В первом случае убедитесь, что все файлы .cpp предварительно обработаны и сохранены в файлы .i. Эту сборку не нужно завершать, нужно только сохранить .i файлы. Затем, после этого, я выбираю все файлы .cpp и устанавливаю для них «Исключить из сборки», затем все компилируется так, как должно.
2) Вместо добавления файлов в проект и использования опции внешнего инструмента сборки, вместо этого сделайте шаг предварительной ссылки, на котором мой собственный инструмент автоматически найдет все файлы .i (может принять все * .i в определенном каталоге ), обработайте их в * .obfuscated.cpp, а затем вручную вызовите cl.exe для всех этих файлов для создания объектных файлов, переименуйте их в собственные имена (чтобы компоновщик считал, что они являются объектными файлами, созданными из оригинальных источников) и поместите в промежуточный каталог. Но в этом случае мне придется отслеживать все аргументы компилятора и изменять их соответственно, если что-то изменится в моем проекте ...
Оба эти решения кажутся не слишком удачными. Есть ли другой способ сделать это в Visual Studio? Разве я не могу просто сказать компоновщику игнорировать отсутствующие файлы .obj? (Все символы будут найдены в любом случае ...)