2011-06-27 177 views
0

我正在使用scons编译我的C++应用程序禁用控制台窗口,但我无法完成此操作。 在互联网和StackOverflow搜索,我发现这条线将工作
env.Append(LINKFLAGS=['-Wl,-subsystem,windows'])
问题是我总是收到一条警告消息,该行被忽略。 这是消息:隐藏控制台窗口LNK4044警告

LINK : warning LNK4044: unrecognized option '/Wl,-subsystem,windows'; ignored

我已经尝试过: env.Append(LINKFLAGS=['-Wl,-subsystem:windows'])
env.Append(LINKFLAGS='-Wl,-subsystem,windows')
env.Append(LINKFLAGS=['/Wl,-subsystem,windows'])
env.Append(LINKFLAGS=['/Wl,-subsystem:windows'])

就像你注意到没有,许多可能性我已经做了,但没有sucess。 下面我张贴我的SConstruct文件的一部分。 任何帮助非常感谢。

感谢所有回复

# GNU GCC 
if 'gcc' in env[ 'compiler' ]: 
env.Append(CCFLAGS='-Wall', CPPDEFINES=['GCC']) 
if int(debug): 
    env.Append(CCFLAGS='-g', LINKFLAGS='-g') 
else: 
    env.Append(CCFLAGS='-O2', LINKFLAGS='-O2')` 
# MSVC v9 
elif 'msvc' in env['compiler']: 
env.Append(LINKCOM=[ 'mt.exe -nologo -manifest ${TARGET}.manifest -outputresource:$TARGET;1' ]) 
env.Append(SHLINKCOM=[ 'mt.exe -nologo -manifest ${TARGET}.manifest -outputresource:$TARGET;2' ]) 
env.Append(CCFLAGS='/W3 /EHsc', CPPDEFINES=[ 'WIN32', 'WINDOWS', 'MSVC', '_CRT_SECURE_NO_WARNINGS' ]) 
env.Append(CPPDEFINES='MSVC_DLL') 
env.Append(LIBS = 'WS2_32') 
env.AppendUnique(LINKFLAGS=['-Wl,-subsystem,windows']) 

if int(debug): 
    env.Append(CCFLAGS='/Od /RTC1 /MDd /Gy /Zi', LINKFLAGS='/DEBUG') 
else: 
    env.Append(CCFLAGS='/O2 /Oi /GL /MD', LINKFLAGS='/LTCG')` 
+0

wl似乎是一个用于设置警告级别的编译器标志;至少它没有被记录为链接器标志。由于您已经在CCFLAGS中设置了警告级别,因此请删除“wl”。 – Luke

回答

0

对不起。我犯了一个错误。 Wl,只是为了防止警告; 就像你说的那样:它只是将env.Append(LINKFLAGS=['/Wl', '/SUBSYSTEM:WINDOWS'])插入到SConstruct中。 我犯了一个非常虚假的错误。 在main.cpp中,我忘记了是否在控制台或窗口应用程序上运行我的软件时进行了简单验证。 只是一个简单的#ifdef WIN32_LEAN_AND_MEAN

感谢您的支持。

0

env.Append(LINKFLAGS = [ '/ WL', '/子系统:WINDOWS'])

不知道,如果它的大小写敏感的,但应该工作。你的选择只是没有得到正确的链接。

+0

另外,我同意Luke的观点,即Wl是链接器的一个小嫌疑犯......但无论如何,如果你想在一行中传递多个标志给链接器,请使用引用逗号分隔的列表,如上所示,它应该是好的去 – Tom