【问题标题】:How to remove certain file from a list in .pro file?如何从 .pro 文件的列表中删除某些文件?
【发布时间】:2021-05-07 23:11:27
【问题描述】:

编译Project 1时,包括main.o在内的一堆目标文件被放入buildfolder。

现在我喜欢在 Project 2 中像库一样使用这些目标文件,所以您可以手动将所有文件添加到 LIBS 分配中

//project2.pro
LIBS += $$buildfolderProject1/compressedair.o \
        $$buildfolderProject1/connectca.o \
        $$buildfolderProject1/controlpanelca.o \
        $$buildfolderProject1/compressedair.o \
        $$buildfolderProject1/moc_compressedair.o \
        $$buildfolderProject1/moc_controlpanelca.o \
        $$buildfolderProject1/moc_screenca.o \
        $$buildfolderProject1/qrc_resources.o \
        $$buildfolderProject1/screenca.o 

一个更方便的方法是这样的:

//project2.pro
LIBS += $$buildfolderProject1/*.o

但是由于 buildfolderProject1 还包含 Project1 的 main.o,所以在编译时会出错(main 的多个定义)。

所以我尝试使用以下方法删除main.o

LIBS -= $$buildfolderProject1/main.o

但这不适用于LIBS += $$buildfolderProject1/*.o 方法。

【问题讨论】:

  • 为什么在项目之间共享的文件所在的目录中有未共享的main.cpp? (并不是说我支持这种方法。感觉很脆弱。)
  • 当然,将非共享对象文件保存在单独的目录中是一种方法。但我会对如何从 $$buildfolderProject1/*.o 结构中删除某个文件感兴趣。我使用术语结构是因为我不知道 qmake 如何处理这个问题。我认为 LIBS -= 从列表中减去某个字符串,但不影响 $$buildfolderProject1/*.o 结构。
  • 我建议您将所有与两个项目相互关联的文件移动到一个库(共享/静态)中,然后通过链接到您创建的新库来编译这两个项目。更好、更清洁的解决方案!

标签: c++ qt qmake


【解决方案1】:

有一种方法可以从列表中删除某个文件。解释:
不工作:

//project2.pro
LIBS += $$buildfolderProject1/*.o
LIBS -= LIBS -= $$buildfolderProject1/main.o


工作:

//project2.pro
myObjectFileList = $$files($$buildfolderProject1/*.o) 
myObjectFileList-= $$buildfolderProject1/main.o

LIBS += myObjectFileList

我完全不明白,但不知何故,$$files 返回一个可以在 .pro 文件中编辑的可编辑文件列表。 并且在 NOT WORKING Code 编译中会出错,因为 qmake 会直接提取所有 .o 文件,而无法编辑列表。

在 qmake 文档中我发现 qmake 内置的 $$files 函数是一个替换函数。

【讨论】:

    猜你喜欢
    • 2014-03-26
    • 2014-04-19
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    • 2016-03-03
    • 1970-01-01
    • 1970-01-01
    • 2014-09-06
    相关资源
    最近更新 更多