将qmake配置为安装标头到不同的子文件夹

时间:2012-12-31 09:05:20

标签: qt qmake nmake

我有一个项目,其中头文件位于不同的子文件夹中(/config/.h; /thread/.h等) 在qt项目文件中,它们包括在内:

HEADERS += $$PWD/src/*.h
HEADERS += $$PWD/src/config/*.h

然后安装被描述为简单:

headers.files = $$HEADERS
headers.path  = $$INSTALL_INC_DIR/proj

使用此lib的其他一些项目将包含来自该安装目录的文件,并且会出现问题 - 所有.h文件都复制到同一文件夹,没有子文件夹,代码中包含子文件夹(#include <proj/config/config.h>)。

是否有可能告诉qmake(或实际上是nmake)复制文件时保留原始文件夹结构?

2 个答案:

答案 0 :(得分:6)

这对我有用:

headerinstall.pri:

for(header, INSTALL_HEADERS) {
  path = $${INSTALL_PREFIX}/$${dirname(header)}
  eval(headers_$${path}.files += $$header)
  eval(headers_$${path}.path = $$path)
  eval(INSTALLS *= headers_$${path})
}
<。p>在.pro文件的末尾:

INSTALL_PREFIX = /tmp/installprefix
INSTALL_HEADERS = $$HEADERS
include(headerinstall.pri)

答案 1 :(得分:0)

我敢肯定,目前接受的2013年答案暂时有效。 但是,对于string conString = string.Empty; switch (extension) { case ".xls": //Excel 97-03 conString = ConfigurationManager.ConnectionStrings["Excel03ConString"].ConnectionString; break; case ".xlsx": //Excel 97-03. conString = ConfigurationManager.ConnectionStrings["Excel07ConString"].ConnectionString; break; } 中的所有斜杠,点和冒号,它对我来说效果不佳。另外,我们现在还必须将$${path}放在文件列表中,才能在for循环中使用它。

这是我想出的方法。我将其写在$$list()文件中,并将其添加到我的目录结构中。不需要额外的*.pri变量:

INSTALL_HEADERS

请注意,替换字符可能会因您而异。例如,我上面的第一种方法仍然在路径中存在空格问题,因此我添加了:

for(header, $$list($$HEADERS)) { path = $$OUT_PWD/../include/$$dirname(header) pathname = $$replace(path,/,) pathname = $$replace(pathname,\.,) pathname = $$replace(pathname,:,) file = headers_$${pathname} eval($${file}.files += $$header) eval($${file}.path = $$path) INSTALLS *= $${file} }