【发布时间】: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 结构。
-
我建议您将所有与两个项目相互关联的文件移动到一个库(共享/静态)中,然后通过链接到您创建的新库来编译这两个项目。更好、更清洁的解决方案!