0

我正在尝试在 Windows 中为 VisualStudio 编译 ffmpeg,其中一个步骤是根据这篇文章使用 clang 编译c99-to-c89代码。我设法创建了 clang.exe,但我如何用它编译 c99-to-c89 代码?

我在 c99-to-c89 中更改了一点 makefile,所以CC变量现在指向 clang.exe 编译器而不是 cl.exe

EXT=.exe

all: c99conv$(EXT) c99wrap$(EXT)

CLANGDIR=C:/build
CC=C:/build/bin/Release/clang.exe
CFLAGS=-nologo -Z7 -D_CRT_SECURE_NO_WARNINGS=1 -Dpopen=_popen -Dunlink=_unlink -Dstrdup=_strdup -Dsnprintf=_snprintf -I. -I$(CLANGDIR)/tools/clang/include
LDFLAGS=-nologo -Z7 $(CLANGDIR)/lib/Release/libclang.lib

clean:
    rm -f c99conv$(EXT) c99wrap$(EXT) convert.o compilewrap.o
    rm -f unit.c.c unit2.c.c

test1: c99conv$(EXT)
    $(CC) -P unit.c -Fiunit.prev.c
    ./c99conv unit.prev.c unit.post.c
    diff -u unit.{prev,post}.c

test2: c99conv$(EXT)
    $(CC) -P unit2.c -Fiunit2.prev.c
    ./c99conv unit2.prev.c unit2.post.c
    diff -u unit2.{prev,post}.c

test3: c99conv$(EXT)
    $(CC) $(CFLAGS) -P -Ficonvert.prev.c convert.c
    ./c99conv convert.prev.c convert.post.c
    diff -u convert.{prev,post}.c

c99conv$(EXT): convert.o
    $(CC) -Fe$@ $< $(LDFLAGS) $(LIBS)

c99wrap$(EXT): compilewrap.o
    $(CC) -Fe$@ $< $(LDFLAGS)

%.o: %.c
    $(CC) $(CFLAGS) -Fo$@ -c $<

但是当我运行make命令时,我得到clang: error: unsupported use of internal gcc -Z option '-Z7'. 我猜是问题所在CFLAGSLDFLAGS但我不知道如何解决它,因为缺乏对 makefile 和 clang 的了解。

4

2 回答 2

3

如果有人仍然需要,来自 libav 的人为我提供了链接以下载二进制文件c99conv.exe,,c99wrap.exemakedef

于 2012-11-27T15:30:28.510 回答
1

c99conv 必须用 msvc 编译器编译,但它使用来自 LLVM 的库。实际上,转换器使用 clang 作为解析器 C99 源。

因此 clang 需要用 MSVC 编译(因为 MSVC 会将 libclang 与 c99conv 链接)。

因此,只需从您链接的文章中引导构建说明。

  • 运行 Visual Studio 命令提示符。
  • 从 mingw 运行 msys shell。
  • 为您的环境调整 Makefile.w32
  • 使用 Makefile.w32 编译 c99conv

make -f Makefile.w32
于 2012-12-19T06:42:59.053 回答