在传递给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();
}
}
但是,对于正在运行的应用程序Im,我们不允许在运行Release
二进制文件时与外部进程进行通信,因此只能通过Debug
编译的二进制文件来启动此服务器。
我想要在应用程序cmake项目中添加如下内容:
if(CMAKE_BUILD_TYPE MATCHES Release)
# Pass a linker flag here
endif()
然后在库代码中使用此标志来防止服务器启动。
有没有办法做到这一点?我还考虑过只编译两个不同版本的库,并根据构建类型链接到其中一个版本,但这似乎不是一个好的解决方案。