I\'m building my c++ program with cmake on a Mac. The compiler gives me following Error:
error: boost/filesystem.hpp: No such file or directory
First of all use
FIND_PACKAGE(Boost REQUIRED)
rather than
FIND_PACKAGE(Boost)
This way cmake will give you a nice error message if it doesn't find it, long before any compilations are started. If it fails set the environment variable BOOST_ROOT to /opt/local (which is the install prefix). Additionally you will have to link in the filesystem library, so you want
FIND_PACKAGE(Boost COMPONENTS filesystem REQUIRED)
for later use of
target_link_libraries(mytarget ${Boost_FILESYSTEM_LIBRARY})
Enter
cmake --help-module FindBoost
at the shell to get the docs for the Boost find module in your cmake installation.
PS: An example
The CMakeLists.txt
cmake_minimum_required(VERSION 2.6)
project(Foo)
find_package(Boost COMPONENTS filesystem REQUIRED)
include_directories(${Boost_INCLUDE_DIRS})
add_executable(foo main.cpp)
target_link_libraries(foo
${Boost_FILESYSTEM_LIBRARY}
)
main.cpp
#include
#include
#include
#include
#include
namespace fs = boost::filesystem;
using namespace std;
int main(int argc, char** argv)
{
vector args(argv+1, argv+argc);
if(args.empty())
{
printf("usage: ./foo SOME_PATH\n");
return EXIT_FAILURE;
}
fs::path path(args.front());
if(fs::exists(path))
printf("%s exists\n", path.string().c_str());
else
printf("%s doesn't exist\n", path.string().c_str());
return EXIT_SUCCESS;
}