On Wed, Oct 7, 2009 at 9:55 PM, Philip Lowman <phi...@yhbt.com> wrote:

> On Wed, Oct 7, 2009 at 11:12 AM, Justin Holewinski 
> <shawmish...@gmail.com>wrote:
>
>>
>> I am trying to compile Boost 1.40 with the Intel C++ Compiler, Version
>> 11.1, using CMake and I've encountered two issues so far.
>>
>>
>> First, on Windows, the Intel C++ Compiler follows Microsoft's naming
>> convention.  The compiler executable is icl.exe, not icc.exe or icpc.exe.
>> Hence, the BoostConfig.cmake script fails to detect the Intel compiler on
>> Windows because it tries to match the compiler name against icpc.exe.  The
>> fix is trivial.  In BoostConfig.cmake, add an additional conditional on line
>> 89:
>>
>> elseif(CMAKE_CXX_COMPILER MATCHES "/icpc$" OR CMAKE_CXX_COMPILER MATCHES
>> "/icpc.exe$" OR CMAKE_CXX_COMPILER MATCHES "/icl.exe$")
>>
>> I'm not sure what impact this has on the build process other than applying
>> the 'intel' branding to the generated libraries instead of 'unknown'.
>>
>
> Hi,
>
> I can fix this in CVS, but might have a slightly better way.  Can you tell
> me what the value of CMAKE_CXX_COMPILER_ID is on Intel C++?
>


For my installation, it appears to be "Intel".  At least that's the value I
get if I add MESSAGE("${CMAKE_CXX_COMPILER_ID}") to the end of the root
CMakeLists.txt file for Boost.



>
>>
>>
>> Second, the handling of inter-library dependencies appears to be broken
>> (when using Intel C++), particularly the dependency between
>> Boost.Wserialization and Boost.Serialization.  A different error is issued
>> for different platforms.
>>
>>
>> Windows:
>>
>> When building shared libraries, the Boost.Wserialization library attempts
>> to link to the shared-library version of Boost.Serialization.  The link
>> library is assumed to be in lib/ (as per Unix conventions), but link
>> libraries for shared DLLs on Windows are placed in bin/.  This results in a
>> CMake dependency error:
>>
>> NMAKE : fatal error U1073: don't know how to make
>> 'lib\boost_serialization-intel-mt-1.40.lib'
>>
>> The correct dependency is instead
>> 'bin\boost_serialization-intel-mt-1.40.lib'.
>>
>
> This is the second time today I've heard of people placing import libraries
> in bin folders.  Any reason why this is happening?
>
> You could look into the Boost preprocessor definitions that disable auto
> linking and rely instead on CMake's target_link_libraries(). See the
> FindBoost docs for more information.
>
>
I have no idea why this is happening.  When using the Visual Studio toolset,
the dynamic-link libraries are placed in bin/ and the import libraries are
placed in lib/, like you would expect.  Why this is not the case when using
the Intel compiler, I have no idea.  Perhaps there are a different set of
command-line switches that are needed to set to the output directory of the
import libraries.  I'll continue to look into it and let you know if I find
something.


Thanks,

Justin Holewinski



> --
> Philip Lowman
>
> _______________________________________________
> Boost-cmake mailing list
> Boost-cmake@lists.boost.org
> http://lists.boost.org/mailman/listinfo.cgi/boost-cmake
>
>


-- 

Thanks,

Justin Holewinski
_______________________________________________
Boost-cmake mailing list
Boost-cmake@lists.boost.org
http://lists.boost.org/mailman/listinfo.cgi/boost-cmake

Reply via email to