首页 > 解决方案 > 是什么阻止 find_library(cc) 在 cmake 中设置变量 c?

问题描述

在一个裸露的 CmakeLists.txt 文件中,我放置了以下内容:

find_library (c c)
find_library (a c)

匹配语法find_library(<var> <lib>)

我运行cmake . 我打开CMakeCache.txt,发现a已经设置了libc的路径,而c根本没有设置。

如果我改为使用set (c "text" CACHE STRING "")c 将设置为“文本”

为什么我可以用 set() 设置 c 而不能用 find_library()?

标签: cmake

解决方案


我已经给你的例子一个尝试,它似乎工作得很好:

cmake_minimum_required(VERSION 2.4)

project(TestFindLibC NONE)

file(WRITE "libc.a" "")

find_library(
    c 
    NAMES c
    PATHS "${CMAKE_CURRENT_SOURCE_DIR}"
    NO_DEFAULT_PATH
)
find_library(
    a 
    NAMES c
    PATHS "${CMAKE_CURRENT_SOURCE_DIR}"
    NO_DEFAULT_PATH
)

message("c = ${c}")
message("a = ${c}")

结果是:

# cmake ..
c = [...]/libc.a
a = [...]/libc.a

所以我和@Tsyvarev 认为你的问题必须在你的CMake 代码中未显示的部分。尝试将以下命令添加到主CMakeLists.txt文件的顶部以进行调试:

variable_watch(a)

推荐阅读