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
我有这样的代码:
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