背景
我是一个完全C++的NeWB,我已经遇到了一个又一个头痛的问题,所以请原谅我,如果这是非常简单的,我是
只是那个哑巴
…
我有一个最终应该在Linux中编译和运行的项目。不幸的是,之后
lots of issues with my C++ development environemnt
(仍悬而未决),我放弃了在Linux中开发,转而使用Windows Visual Studio 2017。我的希望是让我的代码在Windows中工作,然后,因为C++被认为是一种可移植的语言,它应该只是在Linux中以最小的变化工作。
大约有一天,Visual Studio似乎在工作。我可以编写代码,点击“编译”,然后像魔法一样运行它。我把几个类放在一起构造了一个有向非循环图,使用了哈希表的标准库,然后我试图创建一个套接字…
Windows和Linux对套接字使用不同的库(
<sys/socket.h>
VS
<winsock.h>
)因此,我需要某种方法来抽象这些差异,我更喜欢一个成熟的标准。在我发现的周围搜索
the Boost library
这似乎符合我的需要…就在那时,一切都变成了地狱。
我的项目设置
因为这个项目将在各种平台和IDE上开发(有些人使用Windows+Visual Studio,有些人使用Mac+Eclipse,还有一些人使用Linux+Vim),所以我选择把它变成一个cmake项目。经过几个小时的阅读、学习和研究,我觉得cmake应该给我想要的东西(方便且可复制的跨平台构建,几乎没有依赖性问题)
我的源代码(直接从
Boost Getting Started on Windows
指南)如下:
CMAKEProject2.cpp项目
#include <boost/lambda/lambda.hpp>
#include <iostream>
#include <iterator>
#include <algorithm>
int main()
{
using namespace boost::lambda;
typedef std::istream_iterator<int> in;
std::for_each(
in(std::cin), in(), std::cout << (_1 * 3) << " ");
}
每个
Boost Windows入门
指南,我从这里下载了Boost:
https://dl.bintray.com/boostorg/release/1.67.0/source/boost_1_67_0.zip
(有趣的是,《入门指南》标题为“Boost Getting Started on Windows-1.69.0”,但它链接到Boost版本1.67.0)
下载和提取zip文件后,我有一大堆文件——但不知道放在哪里:
到目前为止,尝试让它发挥作用
我试着
add the Boost library to my project
,但没有可用的预期菜单选项:
虽然我
couldn't
find
a
single
page
这就警告了你这一点,显然cmake项目没有难以捉摸的“属性”窗口-相反,第三方库必须通过cmakelists.txt文件包含在其中。
首先,我复制了
整个的
在文件夹名“boost”下,将boost zip文件的540 MB内容发送到我的项目中:
然后我尝试了一系列不同的cmakelist.txt命令:
每
How do you add Boost libraries in CMakeLists.txt?
:
set(Boost_USE_STATIC_LIBS OFF)
set(Boost_USE_MULTITHREADED ON)
set(Boost_USE_STATIC_RUNTIME OFF)
find_package(Boost REQUIRED COMPONENTS lambda)
if(Boost_FOUND)
include_directories(${Boost_INCLUDE_DIRS})
add_executable(CMakeProject2 "CMakeProject2.cpp" "CMakeProject2.h")
target_link_libraries(CMakeProject2 ${Boost_LIBRARIES})
endif()
每
https://www.selectiveintellect.net/blog/2016/7/29/using-cmake-to-add-third-party-libraries-to-your-project-1
:
include("Boost")
add_subdirectory("Boost")
add_subdirectory("boost")
add_subdirectory("Boost/boost")
add_subdirectory("Boost/boost/lambda")
target_link_libraries(boost)
target_link_libraries(Boost)
每
https://cmake.org/pipermail/cmake/2009-November/033249.html
:
SET (Boost_FIND_REQUIRED TRUE)
SET (Boost_FIND_QUIETLY TRUE)
SET (Boost_DEBUG FALSE)
set (Boost_USE_MULTITHREADED TRUE)
set (Boost_USE_STATIC_LIBS TRUE)
SET (Boost_ADDITIONAL_VERSIONS "1.67" "1.67.0")
FIND_PACKAGE(Boost COMPONENTS lambda)
INCLUDE_DIRECTORIES(${Boost_INCLUDE_DIRS})
LINK_DIRECTORIES(${Boost_LIBRARY_DIRS})
我试过其他几个咒语(不熟悉C++)
或
cmake作为一个工具)和从cmakeLists.txt或从cmakeProject2.cpp about接收到错误
cannot open source file "boost/lambda/lambda.hpp"
. 事实上,在添加
足够地
在我的文件中,我开始定期崩溃Visual Studio。请注意,我有一个第8代i7、32GB的RAM和一个M.2NVMe硬盘,所以我很惊讶,一个文本文件中的几行代码足以让微软把我的电脑一次锁上10分钟。
失败的是,我尝试将我需要的文件直接复制到我的项目中:
现在,我对C/C++开发和所有可能出错的东西都很陌生。
有
出了差错。到目前为止,我已经花了近两周时间,几乎没能在两台计算机、三个IDE和四个编译器上编译出一个“你好,世界”应用程序。我还没有取得任何成功,包括任何地方的第三方库,任何流行级别或简单级别,并实际编译了一个引用该库的运行程序。所以,当我说:我不知道“仅标题库”和…无论选择什么。我只知道,根据
Boost Windows入门
指南,
最
Boost的特性是“仅限头部”,因此我不应该有任何构建步骤——应该很容易使用它。此外,此示例(使用
boost::lambda
)是一个只包含标题的库,因此应该非常容易使用。
现在,我稍微更新了源代码,以便在当前目录中查找,而不是在系统include目录中查找(据我目前所知,Windows中不存在该目录):
#include "boost/lambda/lambda.hpp"
#include <iostream>
#include <iterator>
#include <algorithm>
int main()
{
using namespace boost::lambda;
typedef std::istream_iterator<int> in;
std::for_each(
in(std::cin), in(), std::cout << (_1 * 3) << " ");
}
现在我可以
人工验证
此文件存在(文件
CMakeProject2\CMakeProject2\boost\lambda\lambda.hpp
可以在文件资源管理器中找到)-但是我
仍然
获得错误:
无法打开源文件“boost/lambda/lambda.hpp”
进一步的谷歌搜索使我再次更新了cmakelists.txt文件,并将其置于当前格式:
# CMakeList.txt : CMake project for CMakeProject2, include source and define
# project specific logic here.
#
cmake_minimum_required (VERSION 3.8)
# Add source to this project's executable.
file(GLOB CMakeProject2_SRC
"*.h"
"*.cpp"
"**/*.h"
"**/*.cpp"
"**/*.hpp"
"boost/lambda/lambda.hpp"
)
add_executable (CMakeProject2 ${CMakeProject2_SRC})
#add_executable (CMakeProject2 "CMakeProject2.cpp" "CMakeProject2.h")
# TODO: Add tests and install targets if needed.
尽管如此,我
仍然
获取错误:
无法打开源文件“boost/lambda/lambda.hpp”
在这一点上,我要把头发扯下来。我做错什么了?我不知道什么?像“你好,世界”这样简单的东西怎么不适合我?