在不同目录中编译时 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")
我的文件结构如下所示:
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")