我有一个使用Qt5的库。我用这个CMakeLists.txt文件构建它:
cmake_minimum_required (VERSION 3.0)
project (testLib LANGUAGES CXX)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
find_package(Qt5 REQUIRED Widgets)
add_library(testLib SHARED
src/TestClass.cpp
src/TestClass.h
)
target_include_directories(testLib PUBLIC
${CMAKE_CURRENT_SOURCE_DIR}/src
)
target_link_libraries(testLib PUBLIC Qt5::Widgets)
export(TARGETS testLib FILE testLib-exports.cmake)
现在我尝试在构建路径中将可执行文件链接到此库。这是我到目前为止所尝试的:
cmake_minimum_required (VERSION 3.0)
project(TestProject)
add_executable(myexec src/main.cpp )
include(/path/to/testLib-exports.cmake)
target_link_libraries(myexec testLib)
我收到此错误:
目标" myexec"链接到目标" Qt5 :: Widgets"但目标不是 找到。对于IMPORTED,可能缺少find_package()调用 目标,或ALIAS目标丢失?
我不想在myexec的cmake文件中明确使用find_package()
,但希望它是可传递的。那我该如何链接testLib呢?如果答案不在构建路径中,则可以。
编辑:我将导出行更改为:
export(TARGETS testLib FILE testLib-exports.cmake EXPORT_LINK_INTERFACE_LIBRARIES)
这似乎正是我所需要的,但生成和不使用EXPORT_LINK_INTERFACE_LIBRARIES的文件是相同的。两者如果他们说
此文件不依赖于其他导入的目标 已从同一项目导出但在单独的导出集中。
据我了解,它应该使用testLib的目标LINK_INTERFACE_LIBRARIES
属性,但我注意到它是NOTFOUND
。也许这就是问题?但是,INTERFACE_LINK_LIBRARIES
有Qt5 :: Widgets。