Я хочу выбрать файлы, которые скомпилированы в статическую библиотеку на основе конфигурации.
Для этого я создал две конфигурации (A и B) на вкладке Projects в QtCreator, и в моем файле .pro у меня есть
CONFIG(USE_A){
SOURCES += My_lib_a.cpp
}
CONFIG(USE_B){
SOURCES += My_lib_b.cpp
}
и это работает, но есть проблема.
Когда я переключаюсь между конфигурациями A и B пару раз, после того, как обе эти версии были построены , qmake не обнаруживает, что произошли изменения, и библиотека застрял со старым файлом .
Я вынужден либо дотронуться до файла, который я хочу перекомпилировать, либо вручную перестроить библиотеку.
Я проверил на Qt 5.12 и msvc 2017, но мне нужно, чтобы это работало на Windows и Linux.
Это правильный способ сделать это?
Есть ли способ преодолеть эту проблему?
Минимальный пример:
// example/top.pro
TEMPLATE = subdirs
CONFIG += ordered
SUBDIRS += \
my_lib\
app
// example/app/app.pro
TARGET = app
SOURCES += main.cpp
INCLUDEPATH += ../my_lib
DEPENDPATH += ../my_lib
LIBS += -L../my_lib/debug -lmy_lib
PRE_TARGETDEPS += ../my_lib/debug/my_lib.lib
// example/app/main.cpp
#include "My_lib.h"
int main()
{
My_lib m;
}
// example/my_lib/my_lib.pro
TARGET = my_lib
TEMPLATE = lib
CONFIG += staticlib
CONFIG(USE_A){
SOURCES += My_lib_a.cpp
}
CONFIG(USE_B){
SOURCES += My_lib_b.cpp
}
HEADERS += My_lib.h
// example/my_lib/My_lib.h
#pragma once
struct My_lib
{
My_lib();
};
// example/my_lib/My_lib_a
#include "My_lib.h"
#include <iostream>
My_lib::My_lib()
{
std::cout << "This is A" << std::endl;
}
// example/my_lib/My_lib_b
#include "My_lib.h"
#include <iostream>
My_lib::My_lib()
{
std::cout << "This is B" << std::endl;
}