有人可以解释一下(举例)cmake
IMPORTED
和 IMPORTED_LOCATION
属性的目的/用途是什么。我有一个依赖于共享库的可执行文件,目前在我的CMakeLists.txt
中,这就是已编写的内容
cmake_minimum_required(VERSION 3.16)
project(proj)
include(GNUInstallDirs)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
add_executable(${PROJECT_NAME}
src/main.cpp
)
target_compile_features(${PROJECT_NAME} PRIVATE cxx_std_17)
add_library(shared1 SHARED IMPORTED)
set_target_properties(shared1 PROPERTIES
IMPORTED_LOCATION "${CMAKE_INSTALL_FULL_LIBDIR}/libshared1.so"
)
target_link_libraries(${PROJECT_NAME} PRIVATE
shared1
)
当库已存在于
add_library
并且链接器/加载器知道此位置时,为什么需要 set_target_properties
和 /usr/local/lib
函数调用?
线路:
add_library(shared1 SHARED IMPORTED)
创建了一个导入库。导入的库不是在项目内部构建的,它们实际上是指向已构建库的链接。您可以使用此方法为您的第 3 方库创建目标并将其轻松链接到其他目标。线路:
set_target_properties(shared1 PROPERTIES
IMPORTED_LOCATION "${CMAKE_INSTALL_FULL_LIBDIR}/libshared1.so"
)
为导入的库设置已构建库的位置。