在不同目录中编译时 cmake 的行为不同

cmake acting differently when compiling in different directories

我的文件结构如下所示:

gameFolder 
|-cmake-build-debug
|-CMakeLists.txt **for clion build**
|-src
  |-example.cpp
  |-example.h
|-emscripten **web build**
  |-build
  |-CMakeLists.txt

这里的问题是当我 运行 cmake .. 在 emscripten cmake 下的构建文件夹中找不到 boost 库,但是当我 运行 cmake . 在 emscripten 文件夹中直接构建我的项目。

我只想知道这里是怎么回事?是否有一些秘密的奇怪的编译器正在发生?为什么我必须 运行 在与文本文件相同的文件夹中进行 cmake?

编辑: 这是我的 enscripten/CMakeLists.txt

cmake_minimum_required(VERSION 3.17)
project(FernQuest)

message(STATUS "running cmake...")

set(CMAKE_CXX_STANDARD 14)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/out)

include_directories(.)


message(STATUS "finding boost!")
find_package(Boost 1.74.0 REQUIRED serialization system filesystem COMPONENTS serialization system filesystem)

if(Boost_FOUND)
    message(STATUS "found boost!")
endif()

include_directories(${Boost_INCLUDE_DIR})
link_directories(${Boost_LIBRARY_DIR})

if(NOT Boost_FOUND)
    message(FATAL_ERROR "Could not find boost!")
endif()

message(STATUS "setting sources")
SET(FQ_SRCS
    ../src/FernQuest.cpp
    ../src/Item.cpp
    ../src/Item.h
    ../src/Player.cpp
    ../src/Player.h
    ../src/Game.cpp
    ../src/Game.h
    ../src/QuestLog.cpp
    ../src/QuestLog.h)


SET(CMAKE_C_COMPILER emcc)
SET(CMAKE_CPP_COMPILER em++)


add_executable(FernQuest.html ${FQ_SRCS})


if(Boost_FOUND)
    message(STATUS "found boost!")
    target_link_libraries(FernQuest.html)
    target_link_libraries(FernQuest.html ${Boost_LIBRARIES})
endif()

以及当我 运行 描述时出现的错误

build % cmake ..
-- running cmake...
-- finding boost!
CMake Error at /usr/local/Cellar/cmake/3.19.4/share/cmake/Modules/FindPackageHandleStandardArgs.cmake:218 (message):
  Could NOT find Boost (missing: Boost_INCLUDE_DIR serialization system
  filesystem serialization system filesystem) (Required is at least version
  "1.74.0")
Call Stack (most recent call first):
  /usr/local/Cellar/cmake/3.19.4/share/cmake/Modules/FindPackageHandleStandardArgs.cmake:582 (_FPHSA_FAILURE_MESSAGE)
  /usr/local/Cellar/cmake/3.19.4/share/cmake/Modules/FindBoost.cmake:2193 (find_package_handle_standard_args)
  CMakeLists.txt:13 (find_package)


-- Configuring incomplete, errors occurred!

所以我偶然发现了一个解决方案:

include_directories("path-to-emscripten")

对我来说,它是使用 brew 安装的,所以我只是在顶部输入它,它就成功了

include_directory("/usr/local/Cellar")