Qt:在库中注入定义

Qt: inject defines in a library

我有这样的代码:

myproject.pro

TEMPLATE = subdirs

DEFINES += mydefine

SUBDIRS += \
        libs/mylib \
        myapp

mylib.pro

contains(DEFINES, mydefine) {
  do something
}
else {
  do something else
}

有没有办法将定义“mydefine”注入到mylib中? 谢谢

很遗憾,您不能这样做。

定义只是编译器宏。您的 IDE 通过考虑这些宏来编译您的代码。我的意思是:

如果你这样写:

int A = 5;
#define SOMETHING
#ifdef SOMETHIN //intentionally misspelled
A = 10;
#endif
std::cout << A ;

您的编译器将看到:

int A = 5;
// compiler : Okayy.. I don't want to compile that
std::cout << A;

并且它会根据所看到的内容生成可执行文件或库。

但您实际上可以编译和生成两个库,并在 运行 时动态加载其中一个。或者;

您再次生成两个不同的库,分别称为 myLibwithDef 和 myLibwithoutDef,然后在您想要使用它们的地方执行类似的操作:

#ifdef Something
LoadDynamicLibraryWithDef()
#else
LoadDynamicLibraryWithoutDef()
#endif