强制find_library再次搜索

斯皮罗斯

在我的CMake脚本中,我必须链接到一个库,该库可以具有两个不同的名称,具体取决于缓存变量。

该库可以是libMyLibrary.a或libMyLibraryCUDA.a,具体取决于CUDA_BACKEND设置为ON还是OFF。CUDA_BACKEND是一个缓存变量。这两个库都位于同一目录中,其路径(在用户输入之后)存储在变量中MYLIBRARY_ABSOLUTE_PATH

if ( CUDA_BACKEND )
    set ( MYLIBRARY_NAME "MyLibraryCUDA" )
else ( CUDA_BACKEND )
    set ( MYLIBRARY_NAME "MyLibrary" )
endif ( CUDA_BACKEND )

find_library ( MYLIBRARY_LIBRARY
    NAMES "${MYLIBRARY_NAME}"
    PATHS "${MYLIBRARY_ABSOLUTE_PATH}/lib"
)

如果用户更改的值CUDA_BACKEND并运行cmake,find_library则不会再次运行,因为该变量MYLIBRARY_LIBRARY包含有效路径(遵循文档):

一旦调用成功,将设置结果变量并将其存储在缓存中,这样就不会再搜索任何调用。

因此,我的问题是:强制find_library再次搜索该库的最干净方法CUDA_BACKEND变更的价值

斯皮罗斯

一个解决方案,我可以跟在一些测试手动的变量设置MYLIBRARY_LIBRARYMYLIBRARY_LIBRARY-NOTFOUND调用之前find_library

如果您只想在find_library自上次配置以来情况发生了变化时才真正执行(在这种情况下,只有用户已更改CUDA_BACKEND),则可以记录设置的最后状态并检查它们是否已更改。下一个代码未经测试,但应该可以工作:

# Where CUDA_BACKEND is set
set (CUDA_BACKEND "OFF" CACHE STRING "Whether to use CUDA")
if ("${CUDA_BACKEND}" STREQ "${CUDA_BACKEND_LAST}")
    set (CUDA_BACKEND_CHANGED "OFF")
else ("${CUDA_BACKEND}" STREQ "${CUDA_BACKEND_LAST}")
    set (CUDA_BACKEND_CHANGED "ON")
endif ("${CUDA_BACKEND}" STREQ "${CUDA_BACKEND_LAST}")
set (CUDA_BACKEND_LAST "${CUDA_BACKEND}")

# Later on, where you define the name of the library
if ( CUDA_BACKEND )
    set ( MYLIBRARY_NAME "MyLibraryCUDA" )
else ( CUDA_BACKEND )
    set ( MYLIBRARY_NAME "MyLibrary" )
endif ( CUDA_BACKEND )

if (CUDA_BACKEND_CHANGED)
    set (MYLIBRARY_LIBRARY "MYLIBRARY_LIBRARY-NOTFOUND")
endif (CUDA_BACKEND_CHANGED)

find_library ( MYLIBRARY_LIBRARY
    NAMES "${MYLIBRARY_NAME}"
    PATHS "${MYLIBRARY_ABSOLUTE_PATH}/lib"
)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

强制find_library重新搜索

来自分类Dev

CMake的find_library是否搜索LD_LIBRARY_PATH?

来自分类Dev

find_library如何处理这样的版本号?

来自分类Dev

cmake find_library中提示路径的顺序

来自分类Dev

如何测试CMake是否使用find_library找到了一个库

来自分类Dev

CMake使用foreach和find_library返回库的完整路径

来自分类Dev

CMake使用find_library()将自己的库添加到项目中

来自分类Dev

CMake FIND_LIBRARY在Windows上有效,但在OS X上无效

来自分类Dev

将find_library的行为从CMake 2.8更改为CMake 3.2

来自分类Dev

如何强制再次调用for循环?

来自分类Dev

Gmail API:强制授权以再次提示用户

来自分类Dev

重新加载Mathjax =再次强制排版

来自分类Dev

重复该程序以再次搜索数组元素

来自分类Dev

类型强制PATH搜索的问题

来自分类Dev

QuickBlox如何检查QBChat / didDisconnect以强制用户再次登录?

来自分类Dev

如何强制网络俘获页面再次出现

来自分类Dev

如何强制Rabbit MQ积累并再次发送消息?

来自分类Dev

如何强制jQuery UI对话框再次重绘或触发某些内容以强制调整大小

来自分类Dev

再次..

来自分类Dev

为什么waitForKeyElements的Google搜索结果需要再次超时?

来自分类Dev

强制UISearchController呈现全屏搜索结果表

来自分类Dev

如何使用bash强制Google / youtube搜索?

来自分类Dev

强制Firefox搜索URL而不是打开

来自分类Dev

Emacs 24.3区分大小写的搜索因Cs Cs“再次搜索”而失败

来自分类Dev

SD卡:如何在不移除sdcard的情况下强制内核再次读取WP引脚

来自分类Dev

重新初始化组件或强制其在Angular中再次运行ngOnInit()

来自分类Dev

在ios 9中-强制用户在一定时间后再次登录

来自分类Dev

如何强制表单在应用程序启动时再次显示?

来自分类Dev

如何强制浏览器隐藏元素,即使它在几秒钟后再次显示

Related 相关文章

  1. 1

    强制find_library重新搜索

  2. 2

    CMake的find_library是否搜索LD_LIBRARY_PATH?

  3. 3

    find_library如何处理这样的版本号?

  4. 4

    cmake find_library中提示路径的顺序

  5. 5

    如何测试CMake是否使用find_library找到了一个库

  6. 6

    CMake使用foreach和find_library返回库的完整路径

  7. 7

    CMake使用find_library()将自己的库添加到项目中

  8. 8

    CMake FIND_LIBRARY在Windows上有效,但在OS X上无效

  9. 9

    将find_library的行为从CMake 2.8更改为CMake 3.2

  10. 10

    如何强制再次调用for循环?

  11. 11

    Gmail API:强制授权以再次提示用户

  12. 12

    重新加载Mathjax =再次强制排版

  13. 13

    重复该程序以再次搜索数组元素

  14. 14

    类型强制PATH搜索的问题

  15. 15

    QuickBlox如何检查QBChat / didDisconnect以强制用户再次登录?

  16. 16

    如何强制网络俘获页面再次出现

  17. 17

    如何强制Rabbit MQ积累并再次发送消息?

  18. 18

    如何强制jQuery UI对话框再次重绘或触发某些内容以强制调整大小

  19. 19

    再次..

  20. 20

    为什么waitForKeyElements的Google搜索结果需要再次超时?

  21. 21

    强制UISearchController呈现全屏搜索结果表

  22. 22

    如何使用bash强制Google / youtube搜索?

  23. 23

    强制Firefox搜索URL而不是打开

  24. 24

    Emacs 24.3区分大小写的搜索因Cs Cs“再次搜索”而失败

  25. 25

    SD卡:如何在不移除sdcard的情况下强制内核再次读取WP引脚

  26. 26

    重新初始化组件或强制其在Angular中再次运行ngOnInit()

  27. 27

    在ios 9中-强制用户在一定时间后再次登录

  28. 28

    如何强制表单在应用程序启动时再次显示?

  29. 29

    如何强制浏览器隐藏元素,即使它在几秒钟后再次显示

热门标签

归档