diff --git a/Make.rules.in b/Make.rules.in
index f4001096ef3..696614469c7 100644
--- a/Make.rules.in
+++ b/Make.rules.in
@@ -14,7 +14,7 @@
 DEFS         = -D__WINESRC__ $(EXTRADEFS)
 ALLCFLAGS    = $(DEFS) $(EXTRACFLAGS) $(CPPFLAGS) $(CFLAGS) $(MODCFLAGS)
 IDLFLAGS     = $(DEFS) $(EXTRAIDLFLAGS)
-RCFLAGS      = --nostdinc $(PORCFLAGS) $(TARGETFLAGS) $(DEFS) $(EXTRARCFLAGS)
+RCFLAGS      = --nostdinc $(PORCFLAGS) $(DEFS)
 
 OBJS = $(C_SRCS:.c=.o) $(BISON_SRCS:.y=.tab.o) $(LEX_SRCS:.l=.yy.o) $(OBJC_SRCS:.m=.o) \
        $(RC_SRCS:.rc=.res) $(MC_SRCS:.mc=.res) $(EXTRA_OBJS)
diff --git a/Make.vars.in b/Make.vars.in
index d4b346a2bf7..92d8c064e90 100644
--- a/Make.vars.in
+++ b/Make.vars.in
@@ -65,8 +65,8 @@ LIBPORT         = $(top_builddir)/libs/port/libwine_port.a
 LIBWPP          = $(top_builddir)/libs/wpp/libwpp.a
 LIBWINE         = -L$(top_builddir)/libs/wine -lwine
 LIBWINE_STATIC  = $(top_builddir)/libs/wine/libwine_static.a
-WINEGCC         = $(TOOLSDIR)/tools/winegcc/winegcc $(TARGETFLAGS) -B$(TOOLSDIR)/tools/winebuild --sysroot=$(top_builddir) @UNWINDFLAGS@
-CROSSWINEGCC    = $(TOOLSDIR)/tools/winegcc/winegcc $(CROSSTARGET:%=-b %) -B$(TOOLSDIR)/tools/winebuild --sysroot=$(top_builddir) --lib-suffix=.cross.a
+WINEGCC         = $(TOOLSDIR)/tools/winegcc/winegcc -B$(TOOLSDIR)/tools/winebuild --sysroot=$(top_builddir) @UNWINDFLAGS@
+CROSSWINEGCC    = $(TOOLSDIR)/tools/winegcc/winegcc -B$(TOOLSDIR)/tools/winebuild --sysroot=$(top_builddir) --lib-suffix=.cross.a
 SED_CMD         = LC_ALL=C sed -e 's,@bindir\@,$(bindir),g' -e 's,@dlldir\@,$(dlldir),g' -e 's,@PACKAGE_STRING\@,@PACKAGE_STRING@,g' -e 's,@PACKAGE_VERSION\@,@PACKAGE_VERSION@,g'
 LDRPATH_INSTALL = @LDRPATH_INSTALL@
 LDRPATH_LOCAL   = @LDRPATH_LOCAL@
diff --git a/dlls/display.drv16/Makefile.in b/dlls/display.drv16/Makefile.in
index 1c2f34c0f1b..e3fd200f0fa 100644
--- a/dlls/display.drv16/Makefile.in
+++ b/dlls/display.drv16/Makefile.in
@@ -2,7 +2,6 @@ MODULE    = display.drv16
 IMPORTS   = user32
 
 EXTRADLLFLAGS = -m16
-EXTRARCFLAGS  = -m16
 
 C_SRCS = display.c
 
diff --git a/dlls/gdi.exe16/Makefile.in b/dlls/gdi.exe16/Makefile.in
index 8f87e289025..5b0676a1a34 100644
--- a/dlls/gdi.exe16/Makefile.in
+++ b/dlls/gdi.exe16/Makefile.in
@@ -2,7 +2,6 @@ MODULE    = gdi.exe16
 IMPORTS   = user32 advapi32 gdi32
 
 EXTRADLLFLAGS = -m16 -Wb,--main-module,gdi32.dll,--heap,65520
-EXTRARCFLAGS  = -m16
 
 C_SRCS = \
 	bidi.c \
diff --git a/dlls/krnl386.exe16/Makefile.in b/dlls/krnl386.exe16/Makefile.in
index 4facf93a0cd..5db734de28e 100644
--- a/dlls/krnl386.exe16/Makefile.in
+++ b/dlls/krnl386.exe16/Makefile.in
@@ -3,7 +3,6 @@ IMPORTLIB = kernel
 IMPORTS   = winecrt0 kernel32 ntdll
 DELAYIMPORTS = ddraw dsound user32
 EXTRADLLFLAGS = -m16 -nodefaultlibs -Wb,--dll-name,kernel
-EXTRARCFLAGS  = -m16
 
 C_SRCS = \
 	atom.c \
diff --git a/dlls/mouse.drv16/Makefile.in b/dlls/mouse.drv16/Makefile.in
index c74e4234591..a50fd21cda7 100644
--- a/dlls/mouse.drv16/Makefile.in
+++ b/dlls/mouse.drv16/Makefile.in
@@ -2,7 +2,6 @@ MODULE    = mouse.drv16
 IMPORTS   = user32
 
 EXTRADLLFLAGS = -m16
-EXTRARCFLAGS  = -m16
 
 C_SRCS = mouse.c
 
diff --git a/dlls/ole2nls.dll16/Makefile.in b/dlls/ole2nls.dll16/Makefile.in
index f7cf7357ff9..ff5a883d9e7 100644
--- a/dlls/ole2nls.dll16/Makefile.in
+++ b/dlls/ole2nls.dll16/Makefile.in
@@ -1,7 +1,6 @@
 MODULE    = ole2nls.dll16
 
 EXTRADLLFLAGS = -m16 -Wb,--main-module,ole32.dll
-EXTRARCFLAGS  = -m16
 
 C_SRCS = ole2nls.c
 
diff --git a/dlls/shell.dll16/Makefile.in b/dlls/shell.dll16/Makefile.in
index 5512b54c0cc..ef7cc30610a 100644
--- a/dlls/shell.dll16/Makefile.in
+++ b/dlls/shell.dll16/Makefile.in
@@ -2,7 +2,6 @@ MODULE    = shell.dll16
 IMPORTS   = shell32 user32 gdi32 advapi32
 
 EXTRADLLFLAGS = -m16 -Wb,--main-module,shell32.dll
-EXTRARCFLAGS  = -m16
 
 C_SRCS = shell.c
 
diff --git a/dlls/user.exe16/Makefile.in b/dlls/user.exe16/Makefile.in
index b50b3c95a5d..2952f0d318f 100644
--- a/dlls/user.exe16/Makefile.in
+++ b/dlls/user.exe16/Makefile.in
@@ -1,7 +1,6 @@
 MODULE    = user.exe16
 IMPORTS   = mpr user32 gdi32
 EXTRADLLFLAGS = -m16 -Wb,--main-module,user32.dll,--heap,65520
-EXTRARCFLAGS  = -m16
 
 C_SRCS = \
 	bidi.c \
diff --git a/tools/makedep.c b/tools/makedep.c
index 3b6b84a1b95..9bd8295392c 100644
--- a/tools/makedep.c
+++ b/tools/makedep.c
@@ -1361,7 +1361,7 @@ static void output_include( struct incl_file *pFile, struct incl_file *owner )
 static struct strarray output_sources(void)
 {
     struct incl_file *source;
-    int i;
+    int i, is_win16 = 0;
     const char *dllext = ".so";
     struct strarray object_files = empty_strarray;
     struct strarray crossobj_files = empty_strarray;
@@ -1379,7 +1379,9 @@ static struct strarray output_sources(void)
     struct strarray dllflags = get_expanded_make_var_array( "DLLFLAGS" );
     struct strarray imports = get_expanded_make_var_array( "IMPORTS" );
     struct strarray all_targets = get_expanded_make_var_array( "PROGRAMS" );
+    struct strarray targetflags = get_expanded_make_var_array( "TARGETFLAGS" );
     struct strarray delayimports = get_expanded_make_var_array( "DELAYIMPORTS" );
+    struct strarray extradllflags = get_expanded_make_var_array( "EXTRADLLFLAGS" );
     char *module = get_expanded_make_variable( "MODULE" );
     char *exeext = get_expanded_make_variable( "EXEEXT" );
     char *testdll = get_expanded_make_variable( "TESTDLL" );
@@ -1389,6 +1391,7 @@ static struct strarray output_sources(void)
 
     if (exeext && !strcmp( exeext, ".exe" )) dllext = "";
     if (module && strendswith( module, ".a" )) staticlib = module;
+    for (i = 0; i < extradllflags.count; i++) if (!strcmp( extradllflags.str[i], "-m16" )) is_win16 = 1;
 
     strarray_add( &includes, "-I." );
     if (src_dir) strarray_add( &includes, strmake( "-I%s", src_dir ));
@@ -1457,6 +1460,8 @@ static struct strarray output_sources(void)
                 output( "%s.res: $(WRC) $(ALL_MO_FILES) %s\n", obj, sourcedep );
                 output( "\t$(WRC) -o $@ %s", source->filename );
                 output_filenames( includes );
+                if (is_win16) output_filename( "-m16" );
+                else output_filenames( targetflags );
                 output_filename( "$(RCFLAGS)" );
                 output( "\n" );
                 output( "%s.res rsrc.pot:", obj );
@@ -1467,6 +1472,8 @@ static struct strarray output_sources(void)
                 output( "%s.res: $(WRC) %s\n", obj, sourcedep );
                 output( "\t$(WRC) -o $@ %s", source->filename );
                 output_filenames( includes );
+                if (is_win16) output_filename( "-m16" );
+                else output_filenames( targetflags );
                 output_filename( "$(RCFLAGS)" );
                 output( "\n" );
                 output( "%s.res:", obj );
@@ -1502,7 +1509,7 @@ static struct strarray output_sources(void)
             output( ": $(WIDL)\n" );
             output( "\t$(WIDL) -o $@ %s", source->filename );
             output_filenames( includes );
-            output_filename( "$(TARGETFLAGS)" );
+            output_filenames( targetflags );
             output_filename( "$(IDLFLAGS)" );
             output( "\n" );
             output_filenames( targets );
@@ -1621,6 +1628,8 @@ static struct strarray output_sources(void)
         output( "\n" );
         output( "\t$(WRC) -O pot -o $@" );
         output_filenames( includes );
+        if (is_win16) output_filename( "-m16" );
+        else output_filenames( targetflags );
         output_filename( "$(RCFLAGS)" );
         output_filenames( po_files );
         output( "\n" );
@@ -1648,7 +1657,6 @@ static struct strarray output_sources(void)
 
     if (module && !staticlib)
     {
-        int is_win16 = strendswith( module, "16" );
         char *importlib = get_expanded_make_variable( "IMPORTLIB" );
         struct strarray all_libs = empty_strarray;
         char *spec_file = appmode ? NULL : replace_extension( module, ".dll", ".spec" );
@@ -1681,10 +1689,11 @@ static struct strarray output_sources(void)
         output_filenames( res_files );
         output( "\n" );
         output( "\t$(WINEGCC) -o $@" );
+        output_filenames( targetflags );
         if (spec_file)
         {
             output( " -shared %s", spec_file );
-            output_filenames( get_expanded_make_var_array( "EXTRADLLFLAGS" ));
+            output_filenames( extradllflags );
         }
         else output_filename( appmode );
         output_filenames( object_files );
@@ -1700,7 +1709,7 @@ static struct strarray output_sources(void)
                 strarray_add( &clean_files, strmake( "lib%s.def", importlib ));
                 output( "lib%s.def: %s\n", importlib, spec_file );
                 output( "\t$(WINEBUILD) -w --def -o $@ --export %s", spec_file );
-                output_filenames( get_expanded_make_var_array( "TARGETFLAGS" ));
+                output_filenames( targetflags );
                 if (is_win16) output_filename( "-m16" );
                 output( "\n" );
                 if (implib_objs.count)
@@ -1723,7 +1732,7 @@ static struct strarray output_sources(void)
                 output_filenames( implib_objs );
                 output( "\n" );
                 output( "\t$(WINEBUILD) -w --implib -o $@ --export %s", spec_file );
-                output_filenames( get_expanded_make_var_array( "TARGETFLAGS" ));
+                output_filenames( targetflags );
                 output_filenames( implib_objs );
                 output( "\n" );
             }
@@ -1816,6 +1825,7 @@ static struct strarray output_sources(void)
         strarray_add( &clean_files, strmake( "%s%s", stripped, dllext ));
         output( "%s%s:\n", testmodule, dllext );
         output( "\t$(WINEGCC) -o $@" );
+        output_filenames( targetflags );
         if (appmode) output_filename( appmode );
         output_filenames( object_files );
         output_filenames( res_files );
@@ -1823,7 +1833,9 @@ static struct strarray output_sources(void)
         output_filename( "$(LDFLAGS)" );
         output( "\n" );
         output( "%s%s:\n", stripped, dllext );
-        output( "\t$(WINEGCC) -s -o $@ -Wb,-F,%s", testmodule );
+        output( "\t$(WINEGCC) -s -o $@" );
+        output_filenames( targetflags );
+        output_filename( strmake( "-Wb,-F,%s", testmodule ));
         if (appmode) output_filename( appmode );
         output_filenames( object_files );
         output_filenames( res_files );
@@ -1840,7 +1852,7 @@ static struct strarray output_sources(void)
             char *testres = replace_extension( testdll, ".dll", "_test.res" );
             output( "all: %s/programs/winetest/%s\n", top_obj_dir, testres );
             output( "%s/programs/winetest/%s: %s%s\n", top_obj_dir, testres, stripped, dllext );
-            output( "\techo \"%s TESTRES \\\"%s%s\\\"\" | $(WRC) $(RCFLAGS) -o $@\n",
+            output( "\techo \"%s TESTRES \\\"%s%s\\\"\" | $(WRC) -o $@\n",
                     testmodule, stripped, dllext );
         }
 
@@ -1854,7 +1866,7 @@ static struct strarray output_sources(void)
             output_filenames( crossobj_files );
             output_filenames( res_files );
             output( "\n" );
-            output( "\t$(CROSSWINEGCC) -o $@" );
+            output( "\t$(CROSSWINEGCC) -o $@ -b %s", crosstarget );
             output_filenames( crossobj_files );
             output_filenames( res_files );
             output_filenames( all_libs );