在使用msvc2013的Qt項目中,我有一個.cpp,必須使用自定義選項/ arch:IA32和預處理器命令_CRT_SECURE_NO_WARNINGS構建。QMAKE_EXTRA_COMPILERS輸出目錄msvc
這裏是有趣的部分我.pro文件:
CONFIG(release, debug|release){
DESTDIR = RELEASE
OBJECTS_DIR = RELEASE/.obj
MOC_DIR = RELEASE/.moc
RCC_DIR = RELEASE/.rcc
UI_DIR = RELEASE/.ui
}
CONFIG(debug, debug|release){
DESTDIR = DEBUG
OBJECTS_DIR = DEBUG/.obj
MOC_DIR = DEBUG/.moc
RCC_DIR = DEBUG/.rcc
UI_DIR = DEBUG/.ui
}
(...)
SPECIAL_SOURCE = extractor.cpp
ExtraCompiler.input = SPECIAL_SOURCE
ExtraCompiler.variable_out = OBJECTS
ExtraCompiler.output = ${QMAKE_VAR_OBJECTS_DIR}${QMAKE_FILE_IN_BASE}$${QMAKE_EXT_OBJ}
ExtraCompiler.commands = $${QMAKE_CXX} $(CXXFLAGS) /arch:IA32 /D_CRT_SECURE_NO_WARNINGS $(INCPATH) -c ${QMAKE_FILE_IN} -o ${QMAKE_FILE_OUT}
QMAKE_EXTRA_COMPILERS += ExtraCompiler
我的問題是,對象創建 - 這是「extractor.obj」 - 不放在同一個目錄中比別人。該目錄可以是RELEASE/.obj或DEBUG/.obj。取而代之的是,「extractor.obj」在根目錄中創建,就在我的.pro文件旁邊。
該系統與其他編譯器如MinGW,Clang或GCC一起工作。我不知道這裏有什麼問題。有沒有人遇到過同樣的問題? 非常感謝。
編輯:兩種解決方案發現
解決方案1:變化ExtraCompiler.output窗戶建設(發佈和調試)
SPECIAL_SOURCE = extractor.cpp
ExtraCompiler.input = SPECIAL_SOURCE
ExtraCompiler.variable_out = OBJECTS
win32:CONFIG(release, debug|release): ExtraCompiler.output = ${QMAKE_VAR_OBJECTS_DIR}release/${QMAKE_FILE_IN_BASE}$${QMAKE_EXT_OBJ}
else:win32:CONFIG(debug, debug|release): ExtraCompiler.output = ${QMAKE_VAR_OBJECTS_DIR}debug/${QMAKE_FILE_IN_BASE}$${QMAKE_EXT_OBJ}
else: ExtraCompiler.output = ${QMAKE_VAR_OBJECTS_DIR}${QMAKE_FILE_IN_BASE}$${QMAKE_EXT_OBJ}
ExtraCompiler.commands = $${QMAKE_CXX} $(CXXFLAGS) -arch:IA32 -D_CRT_SECURE_NO_WARNINGS $(INCPATH) -c ${QMAKE_FILE_IN} -o ${QMAKE_FILE_OUT}
解決方案2:指定輸出使用-Fo替代-o的文件夾(https://msdn.microsoft.com/en-us/library/yb8e9b8y.aspx)
SPECIAL_SOURCE = extractor.cpp
ExtraCompiler.input = SPECIAL_SOURCE
ExtraCompiler.variable_out = OBJECTS
ExtraCompiler.output = ${QMAKE_VAR_OBJECTS_DIR}${QMAKE_FILE_IN_BASE}$${QMAKE_EXT_OBJ}
ExtraCompiler.commands = $${QMAKE_CXX} $(CXXFLAGS) -arch:IA32 -D_CRT_SECURE_NO_WARNINGS $(INCPATH) -c ${QMAKE_FILE_IN} -Fo${QMAKE_FILE_OUT}
這不起作用,.obj仍然創建在.pro文件旁邊。鏈接器現在嘗試在RELEASE/.obj/release目錄中找到它,該目錄爲空 – Mezzo
@Mezzo好的,您的基本名稱在'.obj'前面丟失。我更新了答案。你能再次檢查嗎? –
非常感謝它!添加「$$」不是必需的,沒有變化。我使用'ExtraCompiler.commands = $$ {QMAKE_CXX} $(CXXFLAGS)-arch:IA32 -D_CRT_SECURE_NO_WARNINGS $(INCPATH)-c $ {QMAKE_FILE_IN} -Fo $ {QMAKE_FILE_OUT}時發現另一個解決方案' (注意-Fo條目) – Mezzo