【cmake】——get_filename_component/add_library(ncnn SHARED IMPORTED)

cmake

1. add_library(ncnn SHARED IMPORTED)

最简单的方法是添加

include_directories(${CMAKE_SOURCE_DIR}/inc)
link_directories(${CMAKE_SOURCE_DIR}/lib)

add_executable(foo ${FOO_SRCS})
target_link_libraries(foo bar) # libbar.so is found in ${CMAKE_SOURCE_DIR}/lib

不会在每次编译器调用中添加INTERFACE_INCLUDE_DIRECTORIES标志的现代CMake版本将使用导入的库:

add_library(bar SHARED IMPORTED) # or STATIC instead of SHARED
set_target_properties(bar PROPERTIES
  IMPORTED_LOCATION "${CMAKE_SOURCE_DIR}/lib/libbar.so"
  INTERFACE_INCLUDE_DIRECTORIES "${CMAKE_SOURCE_DIR}/include/libbar"
)

set(FOO_SRCS "foo.cpp")
add_executable(foo ${FOO_SRCS})
target_link_libraries(foo bar) # also adds the required include path

如果设置INTERFACE_INCLUDE_DIRECTORIES不添加路径,则较旧版本的CMake也允许您使用target_include_directories(bar PUBLIC /path/to/include)。但是,此功能不再适用于CMake 3.6或更高版本。

2. get_filename_component

get_filename_component 得到一个完整文件名中的特定部分。

  get_filename_component(<VAR> FileName
                         PATH|ABSOLUTE|NAME|EXT|NAME_WE|REALPATH
                         [CACHE])

将变量设置为路径(PATH),文件名(NAME),文件扩展名(EXT),去掉扩展名的文件名(NAME_WE),完整路径(ABSOLUTE),或者所有符号链接被解析出的完整路径(REALPATH)。注意,路径会被转换为Unix的反斜杠(/),并且没有结尾的反斜杠。该命令已经考虑了最长的文件扩展名。如果指定了CACHE选项,得到的变量会被加到cache中。

  get_filename_component(<VAR> FileName
                         PROGRAM [PROGRAM_ARGS <ARG_VAR>]
                         [CACHE])

在FileName中的程序将会在系统搜索路径中被查找,或者是一个完整路径。如果与PRPGRAM一起给定了PROGRAM_ARGS选项,那么任何在Filename字符串中出现的命令行中选项将会从程序名中分割出来并存储在变量<ARG_VAR>中。这可以用来从一个命令行字符串中分离程序名及其选项。

例子

message("list file", ${CMAKE_CURRENT_LIST_FILE})
get_filename_component(_IMPORT_PREFIX "${CMAKE_CURRENT_LIST_FILE}" PATH)
message("prefix", ${_IMPORT_PREFIX})

输出为:

list file,/home/darknet/CM/10_device/ncnn-20210720-ubuntu-1604-shared/lib/cmake/ncnn/ncnn.cmake
prefix,/home/darknet/CM/10_device/ncnn-20210720-ubuntu-1604-shared/lib/cmake/ncnn

就是得到ncnn.cmake绝对路径文件夹

参考

  1. https://www.cnblogs.com/coderfenghc/archive/2012/07/28/2613567.html
  2. https://www.itranslater.com/qa/details/2583897851189265408
  3. https://blog.csdn.net/q345911572/article/details/105250633
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值