CMake find_path 在简单示例中没有找到路径

stu*_*die 3 cmake

Find_path 在任何情况下都对我不起作用,所以我构建了我认为最简单的测试用例。

我的源代码目录结构包含

E:/Include/fred.h
E:/Src/fizzbuzz/CMakeLists.txt
E:/Src/fizzbuzz/fizzbuzz.cpp
Run Code Online (Sandbox Code Playgroud)

CMakeLists.txt 是:

cmake_minimum_required(VERSION 3.12)
project (fizzbuzz)
find_path(
    GSLINCLUDE
    NAMES "fred.h"
    PATHS ../..   E:/
)
message(STATUS "GSLINCLUDE => ${GSLINCLUDE}")
add_executable(fizzbuzz fizzbuzz.cpp stdafx.h)
Run Code Online (Sandbox Code Playgroud)

这给了我结果:

-- GSLINCLUDE => GSLINCLUDE-NOTFOUND
-- Configuring done
-- Generating done
-- Build files have been written to: E:/src/fizzbuzz
Run Code Online (Sandbox Code Playgroud)

大概我在每种情况下都在做一些简单且明显错误的事情,但是在这个简单的例子中,这个非常简单的目录结构会起作用吗?

如果 CMake 只是不期望这样一个简单的目录结构,那么什么样的目录结构会让它满意?

gor*_*kic 5

简而言之,find_path它不是递归的,所以如果你想在Include子文件夹中找到一些东西,你有两个选择:

状态路径文件应驻留(注意E:/Include而不是E:/):

find_path( GSLINCLUDE NAMES "fred.h" PATHS ../.. E:/Include )

另一种选择是使用PATH_SUFFIXES修饰符:

find_path( GSLINCLUDE NAMES "fred.h" PATHS ../.. E:/ PATH_SUFFIXES Include )

最后,这里是有关find_path的完整文档