我写了一个调用函数TARGET_LINK_LIBRARIES:
的宏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(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
如何在宏中链接库?
答案 0 :(得分:2)
这可能只是因为您没有取消引用宏中的变量cur_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"可能是您的计算机上的库所在,但对于每台计算机而言可能并非如此,并且它当然不是跨平台的: - )