[CMake] find_package
matzeNOTAVAILABLE .
matze999 at gmail.com
Mon Apr 27 07:11:46 EDT 2015
Hi,
thanks for the replies. I am still facing the same issue. For those
interested, here is how to reproduce the issue:
- mkdir test; cd test
- mkdir build; mkdir src; mkdir external
- wget -O external/boost_1_57_0.tar.bz2
http://sourceforge.net/projects/boost/files/boost/1.57.0/boost_1_57_0.tar.bz2/download
- put the cmake script contained in this email into the src directory as
CMakeLists.txt
- cd build
- cmake ../src
After this fails, if i delete CMakeCache.txt and rerun the script, it
works. In fact it seems to be related to the line:
Boost_INCLUDE_DIR:PATH=/usr/include
which is in CMakeCache.txt.
The cmake script is that needs to go in the src directory is as follows:
cmake_minimum_required (VERSION 2.8)
function(install_boost)
set(APT_BOOST_SRC "../external/boost_1_57_0")
MESSAGE(STATUS "APT_BOOST_SRC: " ${APT_BOOST_SRC})
set(APT_BOOST_COMPONENTS "log" "thread" "filesystem" "system")
set(BOOTSTRAP_CMD "./bootstrap.sh")
set(BOOTSTRAP_ARGS "--prefix=${APT_BOOST_BIN}")
message("Executing command: ${BOOTSTRAP_CMD} ${BOOTSTRAP_ARGS}")
execute_process(COMMAND "${BOOTSTRAP_CMD}" ${BOOTSTRAP_ARGS}
WORKING_DIRECTORY ${APT_BOOST_SRC}
RESULT_VARIABLE BS_RESULT OUTPUT_VARIABLE BS_OUTPUT ERROR_VARIABLE
BS_ERROR)
if(NOT BS_RESULT EQUAL 0)
message(FATAL_ERROR "Failed running ${BOOTSTRAP_CMD} ${BOOTSTRAP_ARGS}
in ${APT_BOOST_SRC}:\n${BS_OUTPUT}\n${BS_ERROR}\n")
endif()
#
# run b2
#
set(B2_ARGS "link=static" "threading=multi" "runtime-link=static"
"variant=release")
foreach(COMP IN LISTS APT_BOOST_COMPONENTS)
set(B2_ARGS "--with-${COMP}" ${B2_ARGS})
endforeach(COMP IN LISTS APT_BOOST_COMPONENTS)
if(WIN32)
if(MSVC11)
set(B2_ARGS "--toolset=msvc-11.0" ${B2_ARGS})
elseif(MSVC12)
set(B2_ARGS "--toolset=msvc-12.0" ${B2_ARGS})
endif(MSVC11)
file(TO_NATIVE_PATH ${APT_BOOST_BIN} APT_BOOST_BIN_WIN)
set(B2_ARGS "--prefix=${APT_BOOST_BIN_WIN}" ${B2_ARGS}
"architecture=x86" "address-model=64")
endif(WIN32)
set(B2_ARGS ${B2_ARGS} install)
set(B2_CMD "./b2")
message("Executing command: ${B2_CMD} ${B2_ARGS}")
execute_process(COMMAND ${B2_CMD} ${B2_ARGS} WORKING_DIRECTORY
${APT_BOOST_SRC}
RESULT_VARIABLE B2_RESULT OUTPUT_VARIABLE B2_OUTPUT ERROR_VARIABLE
B2_ERROR)
if(NOT B2_RESULT EQUAL 0)
message(FATAL_ERROR "Failed running ${B2_CMD} in
${APT_BOOST_SRC}:\n${B2_OUTPUT}\n${B2_ERROR}\n")
endif()
endfunction()
set(Boost_DEBUG "ON")
set(APT_BOOST_BIN "${CMAKE_CURRENT_SOURCE_DIR}/boost_requirements")
SET(BOOST_ROOT "${APT_BOOST_BIN}")
MESSAGE (STATUS "1) BOOST_ROOT: ${BOOST_ROOT}")
FIND_PACKAGE( Boost 1.57 REQUIRED COMPONENTS log thread filesystem system)
if(NOT Boost_FOUND)
MESSAGE (STATUS "Extracting boost ...")
execute_process( COMMAND ${CMAKE_COMMAND} -E tar xjzf
../external/boost_1_57_0.tar.bz2 WORKING_DIRECTORY "../external")
MESSAGE (STATUS "Installing boost")
install_boost()
else(NOT Boost_FOUND)
MESSAGE (STATUS "Boost install already exists")
endif(NOT Boost_FOUND)
MESSAGE (STATUS "2) BOOST_ROOT: ${BOOST_ROOT}")
FIND_PACKAGE( Boost 1.57 REQUIRED COMPONENTS log thread filesystem system )
Boost_root as given when setting Boost_Debug=ON appears to be correct.
Many thanks,
Matt
On Fri, Apr 24, 2015 at 4:09 PM, David Cole <DLRdave at aol.com> wrote:
> How do you do step 3) -- build boost?
>
> Unless the build is done and installed and ready to find before the
> end of step 3, there is still nothing (yet) there for the find_package
> in step 4 to find...
>
>
> David C.
>
>
> On Fri, Apr 24, 2015 at 9:36 AM, matzeNOTAVAILABLE . <matze999 at gmail.com>
> wrote:
> > Hi,
> > i am struggling somewhat with find_package. I looked at the documentation
> > and googled quite a bit, but i am still stuck. I alos tried
> stackoverflow to
> > no avail.
> >
> > What i am trying to accomplish is the following:
> > 1) See if my custom boost installation exists (using find_package)
> (version
> > 1.57)
> > 2) If it does not -> build it
> > 3) Use find_package again to find the newly built boost libs.
> >
> > This works up until but not including step 3.
> >
> > Something that it might be complicating matters (i am not sure) is that i
> > have a system boost installation (1.54).
> >
> > 1) (... set boost_root ...)
> > 2) FIND_PACKAGE(Boost 1.57 COMPONENTS log thread filesystem system)
> > 3) (... build boost if it Boost_FOUND is 0)
> > 4) FIND_PACKAGE(Boost 1.57 REQUIRED COMPONENTS log thread filesystem
> system)
> >
> > The second call to find_package does not find the boost installation and
> > thus does not set include dirs etc... properly.
> >
> > I wonder why not?
> >
> > Any hints are greatly appreciated,
> > Matt
> >
> >
> > --
> >
> > Powered by www.kitware.com
> >
> > Please keep messages on-topic and check the CMake FAQ at:
> > http://www.cmake.org/Wiki/CMake_FAQ
> >
> > Kitware offers various services to support the CMake community. For more
> > information on each offering, please visit:
> >
> > CMake Support: http://cmake.org/cmake/help/support.html
> > CMake Consulting: http://cmake.org/cmake/help/consulting.html
> > CMake Training Courses: http://cmake.org/cmake/help/training.html
> >
> > Visit other Kitware open-source projects at
> > http://www.kitware.com/opensource/opensource.html
> >
> > Follow this link to subscribe/unsubscribe:
> > http://public.kitware.com/mailman/listinfo/cmake
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/cmake/attachments/20150427/f40573de/attachment.html>
More information about the CMake
mailing list