链接静态库的时候有没有办法做预处理?

Is there any way to do preprocessing when linking static libraries?

我有一些源文件.c;它们实际上是别人提供的库。当我构建我的程序来使用这个库时,我必须再次编译这些文件。我无法将文件编译成静态库,因为源代码包含一些预处理器标志。我必须生成许多具有不同预处理器标志组合的静态库。

那么,有没有什么技术可以构建静态库,select链接这个库时应该使用哪些预处理器标志?

没有;静态库是目标模块的集合,是一个编译阶段,除了链接选项之外,更改任何内容都为时已晚。

如果您需要为每个项目提供不同的构建选项,只需将库与需要它的项目一起构建即可;无论如何,静态库很少值得付出努力。

不,你不能。您将需要源代码。 c 编译从源代码到可执行文件的三个基本步骤。

源代码->预处理器->编译成目标文件->链接->可执行文件

静态库有点像目标文件。在此之前,它们已经被编译和预处理。链接器使用静态库来生成最终的可执行文件。