【问题标题】:configure qmake for install headers to different subfolders配置 qmake 以将头文件安装到不同的子文件夹
【发布时间】:2012-12-31 09:05:20
【问题描述】:

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

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

然后安装描述为简单:

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

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

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

【问题讨论】:

    标签: qt qmake nmake


    【解决方案1】:

    这对我有用:

    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})
    }
    

    在 .pro 文件的末尾:

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

    【讨论】:

    • 这是很久以前的事了,但我会接受答案。试试看,也许它现在也有用。
    【解决方案2】:

    我敢肯定,目前接受的 2013 年答案暂时有效。 但是,$${path} 中的所有斜线、点和冒号对我来说效果不佳。此外,我们现在必须将$$list() 放在文件列表周围,以便在 for 循环中使用它。

    这是我想出的方法。我把它写在一个*.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}
    }
    

    请注意,替换字符可能因您而异。例如,我上面的第一种方法仍然存在路径中空格的问题,所以我补充说:

    pathname = $$replace(pathname," ",)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-06
      • 2021-10-27
      • 2017-07-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-01
      相关资源
      最近更新 更多