2011-06-27 85 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