gpt4 book ai didi

c++ - 使用 .depends 指定 SUBDIRS 项目之间的依赖关系不起作用

转载 作者:行者123 更新时间:2023-11-28 04:19:06 26 4
gpt4 key购买 nike

我在 qmake SUBDIRS 项目的上下文中设置子项目之间的依赖关系时遇到问题。

我正在使用 .depends 选项来建立一个项目对另一个项目的依赖性,期望在修改后者时重新编译前者,但这并没有发生 - 后者是修改后重新编译,依赖工程没有。

我是否误解了 .depends 选项的含义?

这是一个说明问题的最小示例:

+mysubdirs/
| mysubdirs.pro
| +mylib/
| | mylib.pro
| | MyClass.h
| | MyClass.cpp
| +myapp/
| | myapp.pro
| | main.cpp

mysubdirs.pro:

TEMPLATE = subdirs
SUBDIRS += mylib
SUBDIRS += myapp
CONFIG += ordered
myapp.depends = mylib

mylib.pro:

TEMPLATE = lib
CONFIG += staticlib
HEADERS = MyClass.h
SOURCES = MyClass.cpp

myapp.pro:

TEMPLATE = app
SOURCES = main.cpp
LIBS += "../../build-mysubdirs/mylib/libmylib.a"
INCLUDEPATH += ../mylib

MyClass.h:

#ifndef MYCLASS_H
#define MYCLASS_H
class MyClass
{
public:
MyClass();
};
#endif // MYCLASS_H

MyClass.cpp:

#include "MyClass.h"
#include <iostream>
MyClass::MyClass()
{
std::cout << "in constructor" << std::endl;
}

ma​​in.cpp:

#include "MyClass.h"
int main()
{
MyClass x;
return 0;
}

编译子目录项目。然后将“in constructor”中的字符串更改为其他内容并重新编译:myapp 的输出没有改变。

最佳答案

Am I misunderstanding the meaning of the .depends option?

是的,你是。

基本上,qmake 是一个“Makefile”生成器。而“.depends”在这里的意思是“生成的 Makefile 中的依赖项”。所以 myapp.depends = mylib 在根 Makefile 中变成了 myapp: mylib

但是,mylibmyapp(SUBDIRS)都只是执行递归 make 的 .PHONY 目标调用。所以,在一天结束时,make 将运行两个子 make,它们绝对不相互依赖(因为它通常使用递归 make 模式),除了一个子 make 总是先于另一个运行(因为根 Makefile 中的目标-先决条件关系)。

顺便说一下,这意味着 CONFIG += ordered 在这里没有意义,应该被省略(事实上,它已被弃用,取而代之的是 .depends)。

现在,考虑重新编译 myapp:事实证明,您的可执行文件依赖于您的库(在“有意义的”中),除了库是$$LIBS 中提到(即链接器标志)。要解决此问题,您必须手动将您的库添加到应用程序目标依赖项列表:

myapp.pro

PRE_TARGETDEPS += path/to/mylib.a

关于c++ - 使用 .depends 指定 SUBDIRS 项目之间的依赖关系不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55870239/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com