Условная сборка статической библиотеки, от которой зависит более одного исполняемого файла в qmake

У меня есть проект subdir:

//exaple.pro
TEMPLATE = subdirs

SUBDIRS += \
myLib \
executable_one \
executable_two

myLib статическая библиотека с одной функцией:

//MyLib.h
void foo();

//MyLib.cpp
#include "MyLib.h"#include <iostream>

void foo()
{
#   ifdef MY_DEFINE
std::cout << "MY_DEFINE is defined\n";
#   else
std::cout << "MY_DEFINE is undefined\n";
#   endif
}

И два других проекта, которые ссылаются на эту библиотеку executable_one а также executable_two, В одном я хочу определить MY_DEFINEв другом нет. Итак, я попытался добавить DEFINES += MY_DEFINE в executable_one.pro файл, но в обоих случаях вывод «MY_DEFINE не определен». Я это понимаю myLib был скомпилирован без этого флага перед исполняемым файлом, а затем был просто связан с ним без изменений, но есть ли способ заставить библиотеку быть собранной дважды, и для одного из исполняемых файлов передать эту опцию компилятора в библиотеку?

0

Решение

Вы не сможете достичь этого без компиляции myLib дважды.

Вы должны собрать библиотеку дважды (проще всего иметь два .pro-файла для библиотеки), один с DEFINES += MY_DEFINE один без. Затем два файла .pro должны определять другую цель (один может быть myLib_my_define, другой, myLib_no_my_define).

Потом executable_one свяжется с myLib_my_define, а также executable_two свяжется с myLib_no_my_define,

Очевидно, альтернатива состоит в том, чтобы заменить вашу переменную предварительной обработки обычной переменной (есть foo возьмите булеву переменную для переключателя), но я полагаю, что это невозможно сделать, если вы задали вопрос так, как задали его.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector