6

当我尝试使用导入库时

 add_library(libname SHARED IMPORTED)
    set_property(TARGET libname PROPERTY IMPORTED_LOCATION /<foldername>/<sub-foldername>/lib")

cmake 喊道:

/CMakeLists.txt:28 (target_link_libraries) 处的 CMake 警告 (dev):无法为不是由该项目构建的目标“libname”指定链接库。

CMake 不支持这一点,但它曾经意外地工作并且被允许兼容。

未设置策略 CMP0016:如果只有参数不是目标,则 target_link_libraries() 报告错误。运行“cmake --help-policy CMP0016”以获取策略详细信息。使用 cmake_policy 命令设置策略并禁止显示此警告。此警告适用于项目开发人员。使用 -Wno-dev 来抑制它。

如果这是真的,那么将我的构建树中某处的库包含到另一个项目中的另一种最佳方法是什么。我有一个库设置,另一个地方有将使用这些库的可执行文件。通读 cmake 文档,感觉这将是最好的前进方式,但似乎它只是被支持的一个破碎部分。

4

2 回答 2

10

Cannot specify link libraries for target "libname" which is not built by this project

当您使用target_link_libraries某个目标时,您正在指定如何构建它,但导入的库已经构建。CMake 告诉过你...

将导入的目标链接到可执行文件的示例:

add_library(boo SHARED IMPORTED)
set_target_properties(boo PROPERTIES IMPORTED_LOCATION "/path/to/boo/library")
add_executable(foo foo.cpp)
target_link_libraries(foo boo)

注意使用导入的目标

于 2013-12-21T11:00:56.980 回答
3

在尝试将 Poco C++ 库导入我的项目时,我遇到了与 navderm 相同的错误libPocoFoundation.so,在尝试不同的解决方案失败后,我设法找到了一个对我有用的解决方案:

cmake_minimum_required(VERSION 3.5)
project(MyProject)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")

add_library(PocoLib SHARED IMPORTED GLOBAL)

# It's important to specify the full path to the library you want to import
set_target_properties(PocoLib PROPERTIES IMPORTED_LOCATION "/usr/local/lib/Poco_1.7.2/lib/libPocoFoundation.so")

# create my executable
set(EXEC_SOURCE_FILES main.cpp)
add_executable(MyProject ${EXEC_SOURCE_FILES})

target_link_libraries(MyProject PocoLib)
于 2016-06-08T22:12:44.257 回答