【问题标题】:Force CMAKE to use given library and nothing else强制 CMAKE 使用给定的库,仅此而已
【发布时间】:2014-08-05 23:38:36
【问题描述】:

问题的定位

我试图强制 cmake 使用一个特定的库。我希望可执行文件与这个静态链接,而不是其他链接。如果无法从“/XXX/static_libs”目录静态链接“libgpg-error.a”和“libgcrypt.a”,我希望构建失败。

到目前为止我所拥有的:

到目前为止,我的 CMakeLists.txt 如下所示:

# Project Setup
project(file_crypt)
set(EXECUTABLE_OUTPUT_PATH bin/${CMAKE_BUILD_TYPE})

# Includes
include_directories(.)

# Link
link_directories( ${gcrypt_lib_dir} ${dl_crypt_lib_dir} )
find_library( gcrypt_libs NAMES libgcrypt.a libgpg-error.a PATHS ${gcrypt_lib_dir} NO_DEFAULT_PATH )

# Executables Declarations
add_executable( my_decrypt
                my_decrypt.cpp [...] )
set_target_properties( my_decrypt PROPERTIES COMPILE_FLAGS "-m32" LINK_FLAGS "-m32" )


# Link to libraries
target_link_libraries( my_decrypt ${gcrypt_libs} dl crypt )

我补充说:

gcrypt_lib_dir:FILEPATH=/XXX/static_libs

到我的 CMakeCache.txt。如果我在 "/XXX/static_libs" 上执行 "ls",我可以同时看到 "libgpg-error.a" 和 "libgcrypt.a"。

然后我运行 cmake。 然后将 gcrypt_libs 变量设置为 not found

问题

  1. 为什么 cmake 找不到那些库?
  2. 上面的文件正确吗?

【问题讨论】:

    标签: cmake


    【解决方案1】:

    我认为您应该在 CMakeLists.txt 中设置 gcrypt_libs,而不是在自动生成的文件 CMakeCache.txt 中设置。我相信如果您使用set 命令设置变量,它应该可以工作。添加如下一行:

    set( gcrypt_libs /XXX/static_libs )
    

    就在您致电 find_library 之前,它应该可以工作。

    更新:正如您在评论中提到的,/XXX/static_libs 是一个与机器相关的位置,不应硬编码到 CMakeLists.txt 中。您使用cmake -C <initial-cache> 初始化变量的想法应该可以完美运行——唯一的是,正如 cmake 的联机帮助页指出的那样:“给定的文件应该是一个 CMake 脚本,其中包含使用 CACHE 选项的 SET 命令,而不是缓存格式文件。 "

    假设你保留了一个名为paths.txt 的初始缓存文件,它可能有

    set( gcrypt_libs /XXX/static_libs CACHE FILEPATH "" )
    

    然后你就可以按照通常的方式用cmake进行配置了:

    cmake -C path/to/paths.txt path/to/source
    

    所以基本上,你仍然不会碰 CMakeCache.txt,而是像这样编写一个脚本来将值加载到缓存中。

    【讨论】:

    • 也许我应该写它。 /XXX/static_libs 取决于开发者机器。因此它不能在 CMakeLists 中。此外,除非您删除该文件,否则运行 cmake 将保留您的 CMakeCache 用户设置。我更多地考虑每个开发人员/机器都有自己的“-C ”选项。但无论如何 +1。
    • 谢谢,我刚刚更新了我的答案以说明此信息,请查看是否可行。
    • 我确信我已经尝试过了,但是我使用了一个小的 "c" ,它正在工作。谢谢你。
    猜你喜欢
    • 2021-12-05
    • 2014-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-07
    • 1970-01-01
    相关资源
    最近更新 更多