假设我有一个共享库,A和其他链接它的东西,B. 他们在两个独立的项目中。
在我当前的设置中,为了A能够正常工作的功能,B需要添加-rdynamic到其链接器选项中,如下所示:
target_link_libraries(B -rdynamic)
问题是 可能有很多很多的依赖项A,因此必须为它们中的每一个显式包含上面的行是一件麻烦事。
有没有办法A让它所有的家属自动使用-rdynamic?
编辑:这里是我的情况的更详细的解释。
我有一个共享库,mylib. 它不能是静态库。它在同名的 CMake 项目中定义。
mylib
├── CMakeLists.txt
└── src
└── ...
它CMakeLists.txt看起来像这样:
# mylib/CMakeLists.txt
project(mylib)
...
add_library(mylib SHARED ${SOURCES})
...
在单独的项目中,有可执行文件 ,client_i使用/链接到mylib,有时是间接的(即链接到链接到的东西mylib)。
client_0
├── CMakeLists.txt
└── src
└── ...
client_1
├── CMakeLists.txt
└── src
└── ...
client_2
├── CMakeLists.txt
└── src
└── ...
...
其中之一CMakeLists.txt看起来像:
# client_i/CMakeLists.txt
project(client_i)
...
add_executable(client_i ${SOME_OTHER_SOURCES})
target_link_libraries(client_i mylib -rdynamic)
...
注意-rdynamic. 如果没有此选项,则由 提供的某些功能mylib不起作用。我需要它。
我的问题是可能有成千上万个不同client_i的 s,每个都由我提供的不同人/用户在自己的项目中定义mylib(并且可以用作二进制文件)。
我想避免必须添加-rdynamic到每个client_is,因为有些用户可能不知道它(因为它可能被间接使用),有些人可能会忘记它,它可能会导致头痛等。
理想情况下,CMakeLists.txtformylib看起来像:
# mylib/CMakeLists.txt
project(mylib)
...
add_library(mylib SHARED ${SOURCES})
target_link_libraries(mylib -rdynamic)
...
aclient_i CMakeLists.txt只是:
# client_i/CMakeLists.txt
project(client_i)
...
add_executable(client_i ${SOME_OTHER_SOURCES})
target_link_libraries(client_i mylib)
...
它会-rdynamic在它的链接器选项中。但是我已经尝试过了,它似乎不起作用。