Hyperlink 使用目标链接库的宏中的CMake错误

Hyperlink 使用目标链接库的宏中的CMake错误,hyperlink,macros,cmake,Hyperlink,Macros,Cmake,我编写了一个宏来调用函数TARGET_LINK_库: macro(Link_Libs cur_target) #ATLAS LIBS on Linux add_library(ptlapack STATIC IMPORTED) set_property(TARGET ptlapack PROPERTY IMPORTED_LOCATION /usr/local/atlas/lib/libptlapack.a) TARGET_LINK_LIBRARIES(cur

我编写了一个宏来调用函数TARGET_LINK_库:

macro(Link_Libs cur_target)

#ATLAS LIBS on Linux

add_library(ptlapack STATIC IMPORTED)
set_property(TARGET ptlapack PROPERTY
                IMPORTED_LOCATION /usr/local/atlas/lib/libptlapack.a)

TARGET_LINK_LIBRARIES(cur_target ptlapack)
endmacro()
然后我从project调用了宏

project(CPU_Matrix)
cmake_minimum_required(VERSION 2.8)

aux_source_directory(./src/ SRC_LIST1)
include_directories(./include/)  

add_executable(CPU_Matrix ${SRC_LIST1} )

INCLUDE(${CMAKE_MODULE_PATH}/LinkLibs.txt NO_POLICY_SCOPE)
Link_Libs(CPU_Matrix_Class_Test_Satisfy)
当我运行CMake时,它给出了错误:

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

如何链接宏中的库?

这可能是因为您没有在宏中取消引用变量
cur\u target
。您必须执行以下操作:

target_link_libraries(${cur_target} ptlapack)
除此之外,您只能调用此宏一次,因为您不能不断重复添加ptlapack。您应该添加一个保护,以避免多次尝试添加库,例如

if(NOT TARGET ptlapack)
  add_library(ptlapack STATIC IMPORTED)
  set_property(TARGET ptlapack PROPERTY
               IMPORTED_LOCATION /usr/local/atlas/lib/libptlapack.a)
endif()

最后,像这样指定一个本地路径是不好的做法。“/usr/local/atlas/lib/libptlapack.a”可能是您机器上的库所在位置,但并非每台机器都是这样,而且它肯定不是跨平台的:-)

谢谢,它可以工作。我学习图书馆。如何链接我自己安装的库(而不是从存储库)?您可以使用来定位库。