将 Boost 库包含到标准 MinGW 路径中
Posted
技术标签:
【中文标题】将 Boost 库包含到标准 MinGW 路径中【英文标题】:Including Boost libraries into standard MinGW path 【发布时间】:2012-09-11 10:36:55 【问题描述】:如何在 MinGW 的标准搜索路径中包含 Boost 库(连同它的包含文件),以便我可以做这样的事情;
#include <filesystem.hpp>
using boost::filesystem;
并避免在 Makefile 中添加 -I、-l 和 -L,就像 C++ 标准库一样? (我在 Windows 7 上使用编译后的 boost 1.51.0)
【问题讨论】:
有什么可以阻止您将其简单地复制到默认目录中,包括目录 (<mingwdir>\include
) 或库目录 (<mingwdir>\lib
iirc)?
@Grizzly 我担心会弄乱我的 MinGW lib 文件夹,但我会尝试一下。
对我来说很好。你到底把什么放在哪里? (请注意,对于适当的库,您显然仍然需要 -l,这只会为您提供路径)
@Grizzly:我将所有库复制到 MinGW 的 lib 文件夹中,并将 boost 文件夹复制到 MinGW 的 include 文件夹中。我的意图是避免 Makefile 或任何构建基础结构中的所有 -I、-l、-L。
我在<mingwdir>/include/boost
中有我的标头,因为我将boost/...
和库包含在<mingwdir>/lib
中并编译类似g++ -o test.exe main.cpp -lboost_thread
的东西。由于我使用的是动态链接的 boost 库,因此我还需要将 dll 放在可以找到它的地方,但它也应该与静态链接的库一起使用。为 lib 避免 -l
有点问题,因为在这种情况下,您必须始终链接所有 boost 库。
【参考方案1】:
我这样做的方式(对于/usr/local
)我添加到我全局定义的CXXFLAGS
。我总是将 MinGW 与 MSys 结合使用。我将 fstab (C:\MinGW\msys\1.0\etc\fstab
) 更改为将 C:\Users
映射到 /home
。 (无论如何这应该是默认值。)然后我在我的用户目录中定义了一个.profile
文件,其中包含我的“默认”CFLAGS
、CXXFLAGS
和LDFLAGS
。所以就我而言:
export CFLAGS=-g -Wall -I/usr/local/include
export CXXFLAGS=-g -Wall -I/usr/local/include
export LDFLAGS=/usr/local/lib
在 makefile 中,我只根据需要扩展变量:
LDFLAGS += -lawsomelib
这就像一个魅力,并具有我可以在特殊情况下本地重新定义CXXFLAGS
的优势。基本上,您应该在 makefile 中假设变量 CC、CXX、CXXFLAGS、CFLAGS 和 LDFLAGS 已经定义并包含有用的东西。这是一种可移植的标准方法。
(注意:/usr/local
不作为标准包含在 vanilla MinGW + MSys 中的位置。)
【讨论】:
【参考方案2】:默认情况下,GCC 会查找 C_INCLUDE_PATH 和 CPP_INCLUDE_PATH 环境变量。 您可以将以下内容添加到您的 .bashrc 中,而不是执行 -I:
export CPP_INCLUDE_PATH=/path/to/your/boost/header
【讨论】:
搜索 .bashrc 文件,但在 MinGW 文件夹中没有找到。那是我需要写的文件吗? @Amani:这是一个 Linux 文件,你显然没有 Windows 文件。在 Windows 中,您可以通过控制面板添加环境变量。 @pwned 这总是取决于你是否使用 MSys 的事实。有少数人将 MinGW 与 cmd 一起使用...但是您始终可以使用 vcvars.bat 技巧。 @pwned:我的 Msys 文件夹在 MinGW 文件夹中,仍然找不到 .bashrc。 GCC docs says 它是 CPLUS_INCLUDE_PATH以上是关于将 Boost 库包含到标准 MinGW 路径中的主要内容,如果未能解决你的问题,请参考以下文章
Qt编译和使用boost库(附5.51的Boost下载)good