生成 Wt 项目时出错。无法打开包含文件:'boost/any.hpp'

Error on building a Wt project. Cannot open include file: 'boost/any.hpp'

本文关键字:文件 boost hpp any 包含 项目 Wt 出错 生成      更新时间:2023-10-16

Wt v.3.2.2和boost libraries v.1.47已成功安装在我的计算机中,安装过程中没有出现任何错误。一些简单的Wt和Boost示例在测试过程中被编译并正确运行。我使用为MSVC 2008配置的CMake为我自己的Wt项目创建构建文件。

然而,当我尝试构建自己的项目时,我遇到了这个错误(无法打开包含文件:"boost/any.hpp")。正如我所看到的,boost/aany.hpp包含在Wt/W应用程序头文件中。

为了获得进一步的帮助,我的CMakeLists.txt文件内容如下:CMakeLists.txt放置在项目目录:

CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
PROJECT(WT_EXAMPLE)
SET (WT_CONNECTOR "wthttp" CACHE STRING "Connector used (wthttp or wtfcgi)")
ADD_SUBDIRECTORY(source)

CMakeLists.txt放在源目录:

CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
SET(WT_INSTALL_DIR "C:/Program Files/WT/boost_1_47")
SET(BOOST_INSTALL_DIR "C:/Program Files/boost")
ADD_EXECUTABLE(
 GOP.wt
 Main.C
)
SET(WT_LIBS
 optimized wthttp debug wthttpd
 optimized wt debug wtd)
SET(BOOST_LIBS
 boost_signals boost_regex boost_thread boost_filesystem boost_system
 boost_random boost_date_time boost_program_options)
TARGET_LINK_LIBRARIES (
 GOP.wt
 ${WT_LIBS} ${BOOST_LIBS} ${SYSTEM_LIBS}
)
LINK_DIRECTORIES (
 ${WT_INSTALL_DIR}/lib/
 ${BOOST_INSTALL_DIR}/lib/
)
INCLUDE_DIRECTORIES(${WT_INSTALL_DIR}/include)
INCLUDE_DIRECTORIES(${BOOST_INSTALL_DIR}/include)

正如我在Wt构建目录上的CMakeCache.txt中所看到的,已经找到了提升库的路径,但。。。这条线怎么样?

//The directory containing a CMake configuration file for Boost.
Boost_DIR:PATH=Boost_DIR-NOTFOUND

我在Wt支持论坛上问了这个问题,但我在大约24小时内都没有得到答案。。。

更新:我发现any.hpp被放在C:\Program Files\boost\boost_1_47\boost\spirit\home\support\agorithm\any.hpp上。所以,我怀疑搜索any.hpp的路径有一个概念(它不直接包含在boost目录中)。

问题已解决。我做了一个新的Wt构建,我在一个新路径中放置和重建boost,我为这个项目写了CMakeLists,并更加谨慎

包含<boost/any.hpp>

例如

#include <boost/any.hpp>
#include <iostream>
#include <vector>
#include <string>
int main() {
    std::vector<boost::any> some_values;
    some_values.push_back(10);
    const char* c_str = "Hello there!";
    some_values.push_back(c_str);
    some_values.push_back(std::string("Wow!"));
    std::string& s = boost::any_cast<std::string&>(some_values.back());
    s += " That is great!n";
    std::cout << s;
}

我们只需要一个像这样的简单cmake文件

# Defines AppBase library target.
project(recipe_01)
cmake_minimum_required(VERSION 3.5)
include(GNUInstallDirs)
set(CMAKE_EXPORT_COMPILE_COMMANDS "ON")
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR})
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR})
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_BINDIR})
if(CMAKE_CXX_STANDARD EQUAL 98 OR CMAKE_CXX_STANDARD LESS 14)
   message(FATAL_ERROR "app requires c++14 or newer")
elseif(NOT CMAKE_CXX_STANDARD)
   set(CMAKE_CXX_STANDARD 14)
   set(CMAKE_CXX_STANDARD_REQUIRED ON)
endif()
find_package(Boost 1.60 REQUIRED)
add_executable(main main.cpp)
target_link_libraries(main)