Есть ли способ использовать внешние флаги, установленные во время компоновки внутри кода библиотеки, который передается компоновщику gcc?Для меня было бы еще лучше, если бы это можно было сделать с помощью CMake, инструмента, используемого в этом проекте.
Я работаю с общей библиотекой ввода / вывода, которая предоставляет серверу для применения динамических изменений вкод.Этот сервер автоматически запускается во время загрузки библиотеки с помощью конструктора атрибутов gcc, как показано в фактическом коде:
#include "RhIO.hpp"
namespace RhIO {
/**
* Create a new thread at program start
* for Server reply and another thread forcd
* Streaming Server
* (GCC specific)
*/
static void __attribute__ ((constructor)) initThreadServer()
{
start();
}
}
Однако для приложения, в котором я работаю, нам не разрешается взаимодействовать с внешними процессами, когдаработает Release
двоичный файл, поэтому этот сервер должен запускаться только скомпилированным двоичным кодом Debug
.
Я хочу добавить что-то подобное в проект cmake приложения:
if(CMAKE_BUILD_TYPE MATCHES Release)
# Pass a linker flag here
endif()
А затем используйте этот флаг внутри кода библиотеки, чтобы предотвратить запуск сервера.
Есть ли какой-нибудь возможный способ сделать это?Я также думал о том, чтобы просто скомпилировать две разные версии библиотеки и связать их с одной из этих версий в зависимости от типа сборки, но это, похоже, далеко от хорошего решения.