• 6287阅读
  • 8回复

[提问]如何不修改程序,编译时自动识别 Linux 还是 Windows [复制链接]

上一主题 下一主题
离线huangxw
 

只看楼主 倒序阅读 楼主  发表于: 2012-05-26
我编写了一个QT程序,要在 Linux 下和 Windows 运行。编译时要修改一些代码,比如串口的设备名等。这个要改来改去,比较麻烦,如何不要修改程序,让程序在编译时自己选择不同的代码编译?
我现在是用预定义变量的方法,就是在 Linux 下编译时,定义 useLinux, 在 Window 下编译时,不定义 useLinux。
还是感觉要改程序比较麻烦。有没有不要改程序的办法?
以前用 MDK KEIL 可以定义预编译变量,就可以实现这种功能,QT 不知如何实现


以下是我用的方法
#define useLinux


#ifdef useLinux
  Linux 代码
#else
  Win 代码
#endif



离线huangxw

只看该作者 1楼 发表于: 2012-05-26
类似 KEIL 同一个项目可以指定2个工程,不同工程可以有不同的 Preprocessor Symbols。这样选择不同工程就编译出不同平台的程序。
不知道 Qt 工程在哪里设置这个
离线liyadong1981
只看该作者 2楼 发表于: 2012-05-26
#ifdef WIN32
  Win 代码
#else
  Linux 代码
#endif

这是QT已经定义好的
离线ppdayz

只看该作者 3楼 发表于: 2012-05-26
可以看 <qglobal.h>
都在这里面
离线dbzhang800

只看该作者 4楼 发表于: 2012-05-26
引用第3楼ppdayz于2012-05-26 16:46发表的  :
可以看 <qglobal.h>
都在这里面

嗯,多看Manual是王道

在Qt下,不就是
Q_OS_LINUX
Q_OS_WIN
Q_OS_MAC
Q_OS_...
这些宏么
离线roywillow

只看该作者 5楼 发表于: 2012-05-26
Q_OS_系列宏可以用在代码中区分系统
Q_WS_系列宏用来区分窗口系统
如果是在pro中进行区分的话可以用
win32 {
}
unix:!macx {
}

macx {
}
之类的来区分
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线dbzhang800

只看该作者 6楼 发表于: 2012-05-27
引用第5楼roywillow于2012-05-26 17:13发表的  :
Q_OS_系列宏可以用在代码中区分系统
Q_WS_系列宏用来区分窗口系统
如果是在pro中进行区分的话可以用
win32 {
}
.......

注意:Q_WS_* 在Qt5已经不存在了
离线roywillow

只看该作者 7楼 发表于: 2012-05-27
回 6楼(dbzhang800) 的帖子
Really?
全靠Q_OS来区分了?

其实……这两个在Qt4究竟该怎么区别使用呢……?
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线dbzhang800

只看该作者 8楼 发表于: 2012-05-27
Re:回 6楼(dbzhang800) 的帖子
引用第7楼roywillow于2012-05-27 10:02发表的 回 6楼(dbzhang800) 的帖子 :
Really?
全靠Q_OS来区分了?
其实……这两个在Qt4究竟该怎么区别使用呢……?

对Win和Mac来说,没有什么区别,因为它们只有一套图形系统。对linux就不一样了,比如:

Q_WS_QWS

Q_WS_X11

在Qt5下,这些东被 qpa 取代了


快速回复
限100 字节
 
上一个 下一个