Есть ли способ использовать флаг внутри кода динамической библиотеки, передавая этот флаг во время связи с cmake? - PullRequest
0 голосов
/ 22 апреля 2019

Есть ли способ использовать внешние флаги, установленные во время компоновки внутри кода библиотеки, который передается компоновщику 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()

А затем используйте этот флаг внутри кода библиотеки, чтобы предотвратить запуск сервера.

Есть ли какой-нибудь возможный способ сделать это?Я также думал о том, чтобы просто скомпилировать две разные версии библиотеки и связать их с одной из этих версий в зависимости от типа сборки, но это, похоже, далеко от хорошего решения.

...