• 4385阅读
  • 3回复

qmake的问题 [复制链接]

上一主题 下一主题
离线lonelyfancy
 

只看楼主 正序阅读 楼主  发表于: 2014-02-26
在用Qt编译libtiff的时候发现一个问题
由于tif_jpeg_12.c包含了tif_jpeg.c,
qmake生成makefile时,没有tif_jpeg.c的编译信息,
导致tif_jpeg.c不会被编译,编译出来的libtiff有问题。
不知道为什么无法上传附件,
libtiff请到ftp://ftp.remotesensing.org/pub/libtiff/tiff-4.0.3.tar.gz下载
pro文件粘贴在下面
把pro文件放在解压出来的tiff-4.0.3目录下就行
没有改libtiff的任何文件,只是写了个pro在Qt Creater下进行编译。
请问有什么办法解决这个问题?
还是只能手动改makefile,或者使用别的工具编译?
这是qmake的bug吗?
环境是Qt 5.2.0 msvc2010 32bit,win8.1

==========pro开始==========
QT       -= core gui

TARGET = libtiff
TEMPLATE = lib
CONFIG += staticlib


HEADERS += ./libtiff/t4.h \
    ./libtiff/tiff.h \
    ./libtiff/tiffconf.h \
    ./libtiff/tiffio.h \
    ./libtiff/tiffiop.h \
    ./libtiff/tiffvers.h \
    ./libtiff/tif_config.h \
    ./libtiff/tif_dir.h \
    ./libtiff/tif_fax3.h \
    ./libtiff/tif_predict.h \
    ./libtiff/uvcode.h

SOURCES += ./libtiff/tif_aux.c \
    ./libtiff/tif_close.c \
    ./libtiff/tif_codec.c \
    ./libtiff/tif_color.c \
    ./libtiff/tif_compress.c \
    ./libtiff/tif_dir.c \
    ./libtiff/tif_dirinfo.c \
    ./libtiff/tif_dirread.c \
    ./libtiff/tif_dirwrite.c \
    ./libtiff/tif_dumpmode.c \
    ./libtiff/tif_error.c \
    ./libtiff/tif_extension.c \
    ./libtiff/tif_fax3.c \
    ./libtiff/tif_fax3sm.c \
    ./libtiff/tif_flush.c \
    ./libtiff/tif_getimage.c \
    ./libtiff/tif_jbig.c \
    ./libtiff/tif_jpeg.c \
    ./libtiff/tif_jpeg_12.c \
    ./libtiff/tif_luv.c \
    ./libtiff/tif_lzma.c \
    ./libtiff/tif_lzw.c \
    ./libtiff/tif_next.c \
    ./libtiff/tif_ojpeg.c \
    ./libtiff/tif_open.c \
    ./libtiff/tif_packbits.c \
    ./libtiff/tif_pixarlog.c \
    ./libtiff/tif_predict.c \
    ./libtiff/tif_print.c \
    ./libtiff/tif_read.c \
    ./libtiff/tif_stream.cxx \
    ./libtiff/tif_strip.c \
    ./libtiff/tif_swab.c \
    ./libtiff/tif_thunder.c \
    ./libtiff/tif_tile.c \
    ./libtiff/tif_version.c \
    ./libtiff/tif_warning.c \
    ./libtiff/tif_win32.c \
    ./libtiff/tif_write.c \
    ./libtiff/tif_zip.c

==========pro结束==========
离线noidea

只看该作者 3楼 发表于: 2014-02-27
1. 从你提供的下载链接看,我没发现有Makfile,我是通过./configure生成的Makefile

2. 从你第一个帖子里,你的问题是导致tif_jpeg.c不会被编译,但是在你的pro文件是包含tif_jpeg.c的。不会编译通常有2种情况,一个是你pro文件就找到这个文件,第二个是你用了一些编译参数跳过该文件。

3. QtCreator是用qmake来将你的pro生成Makefile。你的如下论断
“Qt Creator编译出来的libtiff是没有问题的,所以说是qmake的问题"
我觉得不准确, QtCreator本身只是IDE,不是编译器。编译是靠qmake产生Makefile,然后用你本地编译器(GCC或者MSVC)来执行编译。

最后,我看你的问题是“一个cpp包含另一个cpp”,如果出现这样问题,通常是程序员的问题,编译器可能会为了避免重复包含头文件做出一些判断,但是通常会给你错误提示,比如重复定义,或者找不到定义之类。

你可以贴出你获得错误提示,以便判断是什么问题。



talk in code
Qt5.2.1 + MacOSX10.9
离线lonelyfancy

只看该作者 2楼 发表于: 2014-02-27
回 noidea 的帖子
noidea:我没有尝试你的方法,但是很明显QtCreator产生的Makefile和libtiff的Makefile有很大不同。
libtiff通过./configure 产生的Makefile里边必然有很多依赖库和编译参数组成,QtCreator除非你人为指定,他自己不会给你生成的。
你可以通过对比一下编译参数,在你的pro文件里边加入。
.. (2014-02-27 10:26)

libtiff有一个可以直接编译的makefile
看看tiff-4.0.3\libtiff\Makefile.vc
tiff-4.0.3\nmake.opt
没有你说的那些问题
再说我编译的是静态库
如果手动改一下qmake生成的makefile,
加上tiff_jpeg.c的编译信息,
Qt Creator编译出来的libtiff是没有问题的
所以说是qmake的问题
这有一个隐患,保不齐有人写的代码就是一个cpp包含另一个cpp
libxml2也有这个问题
ftp://xmlsoft.org/libxml2/libxml2-git-snapshot.tar.gz

离线noidea

只看该作者 1楼 发表于: 2014-02-27
我没有尝试你的方法,但是很明显QtCreator产生的Makefile和libtiff的Makefile有很大不同。

libtiff通过./configure 产生的Makefile里边必然有很多依赖库和编译参数组成,QtCreator除非你人为指定,他自己不会给你生成的。

你可以通过对比一下编译参数,在你的pro文件里边加入。

----------
你也可以装MinGW或者Cygwin,就用libtiff自带的makefile编译出windows版本的library
talk in code
Qt5.2.1 + MacOSX10.9
快速回复
限100 字节
 
上一个 下一个