我们正在切换到使用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也被其他项目使用,我不能简单地改变它的名字。
答案 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文件的变量来解决此问题。