链接一个名为" debug"的库。在cmake

时间:2016-09-23 14:14:41

标签: linker cmake

我们正在切换到使用cmake,我建立的一个应用程序使用名为" debug"的库。 (说它位于/path/to/libdebug.so)。

我意识到以下没有工作,因为debug是一个特殊的关键字。

add_executable(myapp myapp.cpp)
target_link_libraries(myapp lib1 lib2 debug lib3)

这两种方法都不行,

add_executable(myapp myapp.cpp)
target_link_libraries(myapp lib1 lib2 lib3 debug)

因为它抱怨

  

" debug"参数必须后跟一个库

cmake中有没有解决方法?现在为了能够继续工作,我将libdebug.so复制到libdebug2.so并且我链接到debug2。但是我需要在cmake中找到一个长期解决方案,因为libdebug.so也被其他项目使用,我不能简单地改变它的名字。

2 个答案:

答案 0 :(得分:4)

另一种方法可能是为调试库创建 IMPORTED 目标:

find_library(DEBUG_LIBRARY debug PATH <directory-contained-the-library> NO_DEFAULT_PATH)
add_library(debug_lib SHARED IMPORTED)
set_target_properties(debug_lib PROPERTIES IMPORTED_LOCATION ${DEBUG_LIBRARY})

此目标可用于链接:

target_link_libraries(myapp lib1 lib2 lib3 debug_lib)

虽然这种方法需要比使用完整库名更多的行(和变量),但它独立于平台:搜索库的扩展名由CMake自动选择。

答案 1 :(得分:1)

在cmake中,您还可以通过它的全名指定库。当您想要指定是否要使用静态库或动态库时,这非常有用。

在这种情况下,这是一个解决方法,保留字&#34; debug&#34;。

target_link_libraries(myapp lib1 lib2 lib3 libdebug.so)

如果您想要在Windows中编译内容,这种方法会遇到问题。然后,您需要使用设置为.so或.lib文件的变量来解决此问题。