代码之家  ›  专栏  ›  技术社区  ›  Matthew Iselin

scons:gcc忽略-c

  •  1
  • Matthew Iselin  · 技术社区  · 15 年前

    我使用一个基于mingw的gcc交叉编译器来编译一个使用scons作为构建系统的项目。

    python是本机2.6.2版本,不是专门为mingw(或cygwin)编译的。

    但是,我在构建中遇到了一个问题:

    F:/pedigree/compilers/bin/i686-elf-gcc -o build\src\user\applications\apptest\ma
    in.obj -c -std=gnu99 -march=i486 -fno-builtin -m32 -g0 -O3 -Wno-long-long -Wnest
    ed-externs -Wall -Wextra -Wpointer-arith -Wcast-align -Wwrite-strings -Wno-long-
    long -Wno-variadic-macros -Wno-unused -Wno-unused-variable -Wno-conversion -Wno-
    format -Wno-empty-body -fno-stack-protector -DTHREADS -DDEBUGGER -DDEBUGGER_QWER
    TY -DSERIAL_IS_FILE -DECHO_CONSOLE_TO_SERIAL -DKERNEL_NEEDS_ADDRESS_SPACE_SWITCH
     -DADDITIONAL_CHECKS -DBITS_32 -DKERNEL_STANDALONE -DVERBOSE_LINKER -DX86 -DX86_
    COMMON -DLITTLE_ENDIAN -D__UD_STANDALONE__ -DINSTALLER -Isrc\subsys\posix\includ
    e -Ibuild\src\user\applications\apptest -Isrc\user\applications\apptest src\user
    \applications\apptest\main.c
    f:/pedigree/compilers/bin/../lib/gcc/i686-elf/4.4.1/../../../../i686-elf/bin/ld.
    exe: crt0.o: No such file: No such file or directory
    

    如果我 添加 -c对于cflags,我得到一个名为“main.obj-c”的编译对象(在obj和-c之间有一个空格)。

    有人知道发生了什么吗?我能做些什么来解决这个问题吗?

    1 回复  |  直到 15 年前
        1
  •  2
  •   Matthew Iselin    15 年前

    该项目使用posix平台来强制程序和对象文件扩展名,但是scons中的posix平台定义了一个函数“escape”:

    def escape(arg):
        "escape shell special characters"
        slash = '\\'
        special = '"$()'
    
        arg = string.replace(arg, slash, slash+slash)
        for c in special:
            arg = string.replace(arg, c, slash+c)
    
        return '"' + arg + '"'
    

    当它摆脱反斜杠时,会在Windows环境中造成严重破坏。更改为中性平台并显式指定扩展,可以解决问题。