Visual c++ 从库中提取所有obj文件

Visual c++ 从库中提取所有obj文件,visual-c++,visual-studio-2013,Visual C++,Visual Studio 2013,如何从.lib文件中提取所有.obj文件?我找到的唯一方法是一次提取一个。有没有办法让它自动化 LIB.EXE /EXTRACT:member.obj Library.LIB 您可以编写一个简短的程序,使用system(…)-Function来执行调用 但是,这仍然会给您带来生成成员对象文件列表的问题。这是我最终使用的批处理文件,其用法是extract.bat mylib.lib或extract.bat*.lib @ECHO OFF SETLOCAL EnableDelayedExpansi

如何从.lib文件中提取所有.obj文件?我找到的唯一方法是一次提取一个。有没有办法让它自动化

LIB.EXE /EXTRACT:member.obj Library.LIB 

您可以编写一个简短的程序,使用
system(…)
-Function来执行调用


但是,这仍然会给您带来生成成员对象文件列表的问题。

这是我最终使用的批处理文件,其用法是
extract.bat mylib.lib
extract.bat*.lib

@ECHO OFF
SETLOCAL EnableDelayedExpansion

:Loop
IF "%1"=="" GOTO Continue

FOR %%F in (%1) DO (

    SET LIBFILE=%%F
    SHIFT

    @ECHO !LIBFILE!

    FOR /F %%O IN ('lib.exe /LIST !LIBFILE! /NOLOGO') DO (
        @SET OBJFILE=%%O
        @ECHO !OBJFILE!
        
        SET OBJPATH=%%~dO%%~pO
        SET OBJNAME=%%~nO

        IF NOT EXIST "!OBJPATH!" md !OBJPATH!

        IF EXIST "!OBJFILE!" ECHO !OBJFILE! exists, skipping...
        IF NOT EXIST "!OBJFILE!" lib.exe /NOLOGO !LIBFILE! "/EXTRACT:!OBJFILE!" "/OUT:!OBJFILE!"
    )
)
GOTO Loop
:Continue

这应该是公认的答案。工作得很有魅力!我的LIBFILE中的原始OBJPATH被映射到系统中不存在的“G:”驱动器。因此,当它试图将obj文件输出到原始路径时,它抱怨位置无效。所以我做了如下操作:设置OBJNAME=%%~nxO和lib.exe/NOLOGO!LIBFILE!“/EXTRACT:!OBJFILE!”“/OUT:!OBJNAME!”这会将所有obj放在同一个文件夹和松散的目录结构中,但这对我的使用很好。这可能是最好的解决方案。但除此之外还有另一种方法。lib文件是一个归档文件,可以使用7z或其他归档工具提取该文件。