如何基于平台排除Qt中的某些文件

时间:2012-12-20 19:57:26

标签: c++ qt cross-platform qmake

我有一个Qt应用程序,我想在Linux上运行,但它使用的API只能在Windows上运行。可能有2或3个类使用API​​,我试图不将它们与程序的其余部分紧密结合。我显然可以在整个地方使用很多#ifdef win32,但我相信在.pro文件中应该有更多的Qt方式。

理想情况下,我希望qmake检测系统并查找API,如果它是win32。然后,如果它找不到它或它在不同的平台上,则排除库和包含API标头的所有类。

这是我的意思的一个例子:

In.pro文件我现在有

SOURCES += main.cpp  \
           mainwindow.cpp \
           win32apiwrapperclass.cpp \
           ...

LIBS += "a/path/to/win32/only/lib -lwin32only

INCLUDEPATH += "a/path/to/win32/only/includes"
DEPENDPATH += "a/path/to/win32/only/includes"

同样在MainWindow.h中我有类似的东西:

private:
    Win32OnlyWrapperClass* win32owc;

然后在cpp文件中使用win32owc几次。所以我希望所有这些都被排除在其他平台之外。希望它有意义。

谢谢!

1 个答案:

答案 0 :(得分:3)

在.pro文件中,您可以执行以下操作:

win32:LIBS += "a/path/to/win32/only/lib -lwin32only

win32:INCLUDEPATH += "a/path/to/win32/only/includes"
win32:DEPENDPATH += "a/path/to/win32/only/includes"    

win32 {    
    LIBS += "a/path/to/win32/only/lib -lwin32only

    INCLUDEPATH += "a/path/to/win32/only/includes"
    DEPENDPATH += "a/path/to/win32/only/includes"    
}

http://doc.qt.digia.com/qt/qmake-advanced-usage.html#scopes-and-conditions