我有以下问题。 我正在编写一个CMakeLists.txt来构建我的C ++项目,该项目由
组成问题是,libhybris.so依赖于libpcre(对于regexp功能),所以我有以下声明:
# libhybris.so generation
add_library( libhybris
SHARED
${LIB_SOURCES} )
...
# Needed libraries
target_link_libraries( libhybris
dl
pcre
pthread
readline )
第3点的一个共享库名为pcre.so,所以我也有以下内容:
add_library( pcre SHARED ${PCRE_SOURCES} )
...
target_link_libraries( pcre
dl
pcre
curl
pthread
readline
ffi
libhybris )
所以,当我运行“cmake”时。我有以下错误:
-- Configuring done
CMake Error: The inter-target dependency graph contains the following strongly connected component (cycle):
"libhybris" of type SHARED_LIBRARY
depends on "pcre"
"pcre" of type SHARED_LIBRARY
depends on "libhybris"
At least one of these targets is not a STATIC_LIBRARY. Cyclic dependencies are allowed only among static libraries.
因为cmake认为libhybris.so pcre依赖(系统libpcre.so)与我的pcre.so相同,这显然不是。
如何解决此问题不用更改pcre.so名称?
答案 0 :(得分:1)
在CMake中,推荐的方法是指定任何具有完整路径的链接库。要获取系统库的完整路径,您可以使用FIND_PACKAGE(...)
(如果支持)或仅FIND_LIBRARY(...)
e.g:
FIND_LIBRARY( PCRE_SYSTEM_LIB pcre )
ADD_LIBRARY( libhybris SHARED ${LIB_SOURCES} )
TARGET_LINK_LIBRARIES( libhybris
${PCRE_SYSTEM_LIB}
......
)
这将阻止CMake将其识别为目标(nameley pcre
)的内容扩展到该目标的完整路径。
答案 1 :(得分:0)
取决于您的开发环境,您可以设置构建路径来克服这些困难。