Go Premium for a chance to win a PS4. Enter to Win

x
?
Solved

Find boost header files using gnu make (MinGW) on Win 7

Posted on 2013-10-26
11
Medium Priority
?
139 Views
Last Modified: 2016-05-09
I am using the gnu c++ compiler and make under MinGW on Win 7.  I want to use several boost libraries.    The problem is that the top level .hpp files are in the boost directory and they reference .hpp files in sub-directories which may reference other .hpp files either at the top level or in sibling sub-directories.  

With Visual Studio I would just point to the top level directory for the headers and it would search sub-directories as needed.

Is there a way to tell gnu make to search that way or do I need to track down each sub-directory that will be used an set up a -I for it?

Thank you!
0
Comment
Question by:anAppBuilder
  • 4
  • 3
11 Comments
 
LVL 86

Accepted Solution

by:
jkr earned 2000 total points
ID: 39603889
Just set your INCLUDE environment variable the same way. Go to the Control Panel, then "System and Security|System|Advanced Settings" and with the dialog that shows up, click "Environement Variables" and either add INCLUDE or modify an existing variable of the same name.
0
 
LVL 86

Assisted Solution

by:jkr
jkr earned 2000 total points
ID: 39603952
BTW, alternatively you also can specify 'INCLUDE' in your Makefile, i.e.

INCLUDE=<Path_to_boost_root>
0
 
LVL 40

Expert Comment

by:evilrix
ID: 39604100
If cmake is struggling to find the boost installed on your platform there are 3 cache variables you can use to provide it a hint. These can either be set in your cmake script or (better) they can be set when you configure cmake on the command line.

BOOST_ROOT
BOOST_INCLUDE_DIR
BOOST_LIBRARY_DIR

If you want to "hard code" them in your script add them BEFORE your call to find Boost.

This is an example of setting it in your cmake script
SET(BOOST_ROOT "<path to boost root folder>")
SET(BOOST_INCLUDE_DIR ${BOOST_ROOT}/include)
SET(BOOST_INCLUDE_DIR ${BOOST_ROOT}/lib)

This is an example of doing the same on the command line when you first configure cmake:

cmake . -DBOOST_ROOT:string="<path to boost root folder>" -D${BOOST_ROOT}/include -D${BOOST_ROOT}/lib

Personally, I would go with the latter. If you hard code it then it'll work on your dev machine but will possibly fail on others.

You want to avoid setting any other variables since these should be set by the FindBoost module.

More info:

http://www.cmake.org/cmake/help/v2.8.12/cmake.html#module:FindBoost
0
Concerto's Cloud Advisory Services

Want to avoid the missteps to gaining all the benefits of the cloud? Learn more about the different assessment options from our Cloud Advisory team.

 

Author Comment

by:anAppBuilder
ID: 39607334
Thank you jkr and evilrix.  

evilrix, I'm using gnu make under MinGW on Win 7. not cmake.  I don't see the SET(<path>) syntax in the gnu manual.  Am I missing something?

jkr, I plan to compile for several platforms, so I prefer to set the INCLUDE in the makefile.  I tried several variations on INCLUDE=<Path_to_boost_root> and none of them works.  The other variations I tried are are commented out in the attached makefile.

The Win 7 path to the boost headers is C:\Program Files (x86)\boost\boost_1_51\boost.  So the path for
      boost/filesystem.hpp
should be
     C:/Program Files (x86)/boost/boost_1_51
For gnu I reversed the \'s to /'s because it does not seem to process \ in a path.

The error in every case is:
$ mingw32-make
g++    -c -o hellomake.o hellomake.c
In file included from hellomake.c:4:0:
hellomake.h:9:32: fatal error: boost/filesystem.hpp: No such file or directory
 #include <boost/filesystem.hpp>
makefile.txt
hellomake.h
0
 
LVL 86

Expert Comment

by:jkr
ID: 39607339
Your path contains spaces, so try to quote it, e.g.

INCLUDE="C:/Program Files (x86)/boost/boost_1_51"
0
 

Author Comment

by:anAppBuilder
ID: 39607372
Thank you, jkr.  That did not change anything.

Note that commented out in the makefile I show the other variations I have tried that did not work.
makefile.txt
0
 

Author Comment

by:anAppBuilder
ID: 39636402
I finally solved the problem.  I had to separate my link from my compiles and put a -I in my compiles.

I then encountered a second problem in my linking:
undefined reference to `boost::system::...

Open in new window

 That was caused because boost/filesystem depends on boost/system, so I had to add the boost/system library to my link.

I've attached the entire working set of test code.
test.zip
0
 

Author Comment

by:anAppBuilder
ID: 41578854
evilrix, you also posted comments.  Shouldn't you give yourself some points?  

And my apologies.  I thought I closed this long ago splitting the points between you and jkr
0

Featured Post

[Webinar] Cloud and Mobile-First Strategy

Maybe you’ve fully adopted the cloud since the beginning. Or maybe you started with on-prem resources but are pursuing a “cloud and mobile first” strategy. Getting to that end state has its challenges. Discover how to build out a 100% cloud and mobile IT strategy in this webinar.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Article by: SunnyDark
This article's goal is to present you with an easy to use XML wrapper for C++ and also present some interesting techniques that you might use with MS C++. The reason I built this class is to ease the pain of using XML files with C++, since there is…
Container Orchestration platforms empower organizations to scale their apps at an exceptional rate. This is the reason numerous innovation-driven companies are moving apps to an appropriated datacenter wide platform that empowers them to scale at a …
The viewer will learn how to use the return statement in functions in C++. The video will also teach the user how to pass data to a function and have the function return data back for further processing.
The viewer will learn how to user default arguments when defining functions. This method of defining functions will be contrasted with the non-default-argument of defining functions.

885 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question