我有一个项目,其中头文件位于不同的子文件夹中(/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)复制文件时保留原始文件夹结构?
答案 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}
}