如何在qmake中引用源目录?

时间:2011-03-04 10:46:53

标签: qmake

我添加了

version.target = version.h
version.commands = bash generate-version.sh

QMAKE_EXTRA_TARGETS += version

PRE_TARGETDEPS += version.h

到项目,但它尝试在目标目录中运行“generate-version.sh”:

make: Leaving directory `.../qqq-build-desktop'
make: Entering directory `.../qqq-build-desktop'
Makefile:236: warning: overriding commands for target `version.h'
Makefile:233: warning: ignoring old commands for target `version.h'
bash generate-version.sh
bash: generate-version.sh: No such file or directory
make: Leaving directory `.../qqq-build-desktop'

有$$ DESTDIR,但我没看到$$ SRCDIR。如何在qmake中引用项目目录(或如何重写它)?

5 个答案:

答案 0 :(得分:12)

我的第一个想法是尝试重写

version.commands = bash generate-version.sh

以便不必调用shell脚本。也许您可以将所有语句组合成一行:

version.commands = echo \'char VERSION[]=\"1.0\";\' > version.h && ls && echo Done

如果您不习惯调用脚本,可能是您正在寻找的PWD或OUT_PWD。来自qmake Variable Reference

  

<强> PWD

     

此变量包含指向qmake项目文件(project.pro)所在目录的完整路径。

     

<强> OUT_PWD

     

此变量包含通向qmake放置生成的Makefile的目录的完整路径。

文档中未提及的一个警告是,如果您正在执行递归qmake,则PWD指的是读取顶级.pro文件的位置。因此,如果从{proj-root}运行qmake -r,当最后读入sub / sub / sub / dir-proj.pro时,PWD仍将指向{proj-root}。

假设generate-version.sh与顶级.pro文件位于同一目录中,您可以尝试:

version.commands = bash $$PWD/generate-version.sh

答案 1 :(得分:1)

我找到了更好更清洁的解决方案

version.target = version.h
version.commands = bash ${QMAKE_VAR__PRO_FILE_PWD_}/generate-version.sh
QMAKE_EXTRA_TARGETS += version

从qt 4.5开始记录变量 _PRO_FILE_PWD _ ,并包含包含正在使用的项目文件的目录的路径(包含.pro文件)

但要为 QMAKE_EXTRA_TARGETS 访问此变量,必须追加 QMAKE_VAR _

答案 2 :(得分:0)

  

PWD

     

指定通向包含该目录的目录的完整路径   正在解析的当前文件。这对于引用其中的文件很有用   编写项目文件以支持阴影构建时的源树。

答案 3 :(得分:0)

我使用(Linux和g ++)

DEFINES += SVN_VERSION=\\\"\""`svnversion $$PWD`\""\\\"
DEFINES += COMPILE_DATE=\\\"\""`date`\""\\\"
DEFINES += SW_VERSION=\\\"\"0.5\"\\\"

将宏SVNVERSON定义为svn版本。 要从C ++访问它:

QString svnVersion = SVN_VERSION;
QString swVersion  = SW_VERSION;

说明:在shell上我想看到这个调用:

-DSVN_VERSION=\""`svnversion /path/to/my/source`"\"

如您所见,在shell级别上需要一些转义。在.pro文件中,它必须被转义两次。

答案 4 :(得分:0)

这很有效,也很容易理解。

version.commands = ( cd $${PWD}; generate-version.sh )