我添加了
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中引用项目目录(或如何重写它)?
答案 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 )