使用target_link_libraries在宏中CMake错误

时间:2015-05-21 15:49:56

标签: hyperlink macros cmake

我写了一个调用函数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

如何在宏中链接库?

1 个答案:

答案 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"可能是您的计算机上的库所在,但对于每台计算机而言可能并非如此,并且它当然不是跨平台的: - )