gpt4 book ai didi

c++ - 忽略丢失的 .obj 文件或 "/P switch + external tool + linker = hell"

转载 作者:太空宇宙 更新时间:2023-11-04 12:18:57 27 4
gpt4 key购买 nike

我正在尝试按照我之前的问题中的描述进行设置:Any way to parse preprocessed source through external tool before it compiles?

我所有的 .cpp 文件都设置为使用/p 编译,这会为所有这些文件生成 .i(预处理的)文件,但没有目标文件。那些生成的 .i 文件也被添加到我的项目中,并且我的工具设置了一个外部构建工具选项来修改这些文件,并将它们保存在新的扩展名 .obfuscated.cpp 下所有这些 .obfuscated.cpp 文件也被添加到项目中,并设置为正常编译,生成目标文件。

现在的问题是 Visual Studio(或链接器,其中的某个人)出于某种原因需要来自 .cpp 文件(现在只是保存到 .i 文件,没有生成目标文件)的 obj 文件,以及来自.obfuscated.cpp(正常创建)。

我会假设链接器不需要来自设置为使用/P 选项编译的源的 .obj 文件,因为该选项会阻止创建目标文件。

现在我只看到两种解决方法:1)分两步进行构建。在第一个中,确保所有 .cpp 文件都经过预处理并保存到 .i 文件中。此构建不必完成,只需保存 .i 文件即可。然后,我选择所有 .cpp 文件并将它们设置为“从构建中排除”,然后一切都按预期进行编译。2)不是将文件添加到项目并使用外部构建工具选项,而是进行预链接步骤,我自己的工具会自动找到所有 .i 文件(可以在某个目录中获取所有 *.i ),将它们处理为 *.obfuscated.cpp,然后在所有这些文件上手动调用 cl.exe 以生成目标文件,将它们重命名为适当的名称(以便链接器认为它们是从原始来源创建的目标文件)并放入进入中间目录。但在这种情况下,我将不得不跟踪所有编译器参数,并在我的项目发生变化时相应地更改它们……这两种解决方案似乎都不是很漂亮。在 Visual Studio 中还有其他方法可以做到这一点吗?我不能告诉链接器忽略丢失的 .obj 文件吗? (无论如何都会找到所有符号......)

最佳答案

也许这可以帮助你:而不是扩展名 .obfuscated.cpp 给它一个更简单的扩展名,比如 .icpp 并添加那些 .icpp 文件(在第一次编译后)到你的项目(在你项目的一个单独的文件夹中),然后对于每个 .icpp 文件转到它们的属性页面并设置正确的构建工具(C\C++ 编译器)和您的 .obj 文件保留与原始 .cpp 文件相同的名称部分,因此链接应该自动正确完成。

关于c++ - 忽略丢失的 .obj 文件或 "/P switch + external tool + linker = hell",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6157513/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com