【问题标题】:Error on building a Wt project. Cannot open include file: 'boost/any.hpp'构建 Wt 项目时出错。无法打开包含文件:'boost/any.hpp'
【发布时间】:2012-07-31 14:12:49
【问题描述】:

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

但是,当我尝试构建自己的项目时,出现此错误(无法打开包含文件:'boost/any.hpp')。如我所见,boost/any.hpp 包含在 Wt/WApplication 头文件中。

如需进一步帮助,我的 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 中看到的,找到了 boost 库的路径,但是……这一行呢?

//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\algorithm\any.hpp。所以,我怀疑有一个搜索any.hpp的路径的概念(它不直接包含在boost目录中)。

【问题讨论】:

  • 已将 INCLUDE_DIRECTORIES(${BOOST_INSTALL_DIR}/include) 更改为 INCLUDE_DIRECTORIES(${BOOST_INSTALL_DIR}),但这并没有解决我的问题。
  • 我总是在 add_executable 之前执行 include_directories。你确定顺序不重要吗?
  • @lap Wt 支持论坛上的一位版主将其发布为 CMakeLists 文件格式,用于生成生成文件以构建用户应用程序。见redmine.webtoolkit.eu/boards/2/topics/4714
  • 我看不出你在哪里使用 FindWtFindBoost 模块。尝试message(STATUS ${BOOST_INSTALL_DIR})检查是否定义了这个变量。
  • 据我所知,如果 Wt 和 Boost 的安装路径已知并给定,则无需使用 FindWt 和 FindBoost。无论如何,我设法解决了这个问题......

标签: c++ boost cmake wt


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    包括

    例如

    #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)
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-16
      • 2020-05-13
      • 2016-10-26
      • 1970-01-01
      • 1970-01-01
      • 2021-10-04
      • 2010-10-20
      • 1970-01-01
      相关资源
      最近更新 更多