[CMake] using cmake to link header files: file could be found, is included, but build error when using nmake.
Karel Geiregat
karelgeiregat at gmail.com
Wed Mar 30 11:15:21 EDT 2016
Dear users at Cmake
It could be that I don't have understood the linking process when building
the project by cmake. The project has three dependencies: (1) Boost, (2)
(Apache) Avro and (3) Botan.
After issuing the following command to be able to use the nmake command
from Visual Studio:
D:\...\build>cmake -G "NMake Makefiles" -DKAA_INSTALL_PATH="D:\kaa\kaaSDK"
> -DKAA_DEBUG_ENABLED=1 ..
>
It ran without problems, except minor warnings like
WARNING: Target "kaacpp" requests linking to directory
> "D:/kaa/kaaBuild/avro_1.8.0/lang/c++/build.win". Targets may link only to
> libraries. CMake is dropping the item.
>
=> note: full log is at the bottom of this mail (appendix 1).
but when i call nmake after, it immediately throws up error:
D:\...\build>nmake
>
> Microsoft (R) Program Maintenance Utility Version 14.00.23506.0
> Copyright (C) Microsoft Corporation. All rights reserved.
>
> Scanning dependencies of target kaacpp_o
> [ 1%] Building CXX object
> CMakeFiles/kaacpp_o.dir/impl/event/registration/EndpointRegistrationManager.cpp.obj
> EndpointRegistrationManager.cpp
> D:\kaa\kaa-cpp-ep-sdk-aXrMkhHEE2BrPBehV_Vbxym2MfU\kaa/gen/EndpointGen.hpp(26):
> fatal error C1083: Cannot open include file: 'avro/Specific.hh': No such
> file or directory
> NMAKE : fatal error U1077: 'C:\PROGRA~2\VISUAL~1.0\VC\bin\cl.exe' : return
> code '0x2'
> Stop.
> NMAKE : fatal error U1077: '"C:\Program Files (x86)\Visual Studio
> 14.0\VC\BIN\nmake.exe"' : return code '0x2'
> Stop.
>
I have checked the file, and there is the following includes
#include <sstream>
> #include "boost/any.hpp"
> #include "avro/Specific.hh" <-------- error line
> #include "avro/Encoder.hh"
> #include "avro/Decoder.hh"
>
My idea is that the linking of the avro library is not set up correctly
since the error got thrown after including a Boost file.
Here is a fragment of my cmakelists.txt file where Avro got added and how
the packages got found/added
# AVRO_ROOT_DIR - Set this variable to the root installation of
> Avro C++ if the module has problems finding the proper installation path.
> # AVRO_LIBRARY - The Avro C++ libraries
> # AVRO_INCLUDE_DIR - The location of Avro C++ headers
> set(AVRO_ROOT_DIR D:/kuleuven/thesis/kaa/kaaBuild/avro_1.8.0/lang/c++)
> set(AVRO_LIBRARY
> D:/kuleuven/thesis/kaa/kaaBuild/avro_1.8.0/lang/c++/build.win)
> set(AVRO_INCLUDE_DIR
> D:/kuleuven/thesis/kaa/kaaBuild/avro_1.8.0/lang/c++/avro)
>
>
some contents omitte
>
>
#
> # Find third-party dependencies
> #
> find_package (Boost 1.54 REQUIRED COMPONENTS log system thread)
> find_package (Avro REQUIRED)
> find_package (Botan REQUIRED)
>
=> note: full cmakelist.txt file is added as appendix2
After that, i have issued the following messaging
message("--- AVRO: Found? " ${AVRO_FOUND}) <----- displays "--- AVRO:
> Found? TRUE"
> message(${AVRO_LIBRARIES}) <----- displays "
> D:/kaa/kaaBuild/avro_1.8.0/lang/c++/build.win"
So, the library can be found. However, it surprises me that the specific
file, Specific.hh could not be found while it is in the include directory,
AVRO_INCLUDE_DIR (according to the findavrocpp.cmake
<https://github.com/Produban/log2kafka/blob/master/cmake/FindAvroCPP.cmake#L33>
it's used for headers).
I have issued the following PowerShell command to show that the file is in
the given directory
PS D:\kaa\kaaBuild\avro_1.8.0\lang\c++\avro> Get-childitem Specific.hh
>
> Directory: D:\kaa\kaaBuild\avro_1.8.0\lang\c++\avro
>
> Mode LastWriteTime Length Name
> ---- ------------- ------ ----
> -a---- 2/9/2012 7:11 PM 7428 Specific.hh
>
So it could be that it is not linking correctly. Is the cmakelist.txt
incorrect or is cmake unable to link the right header file without throwing
an error ?
Is there a solution for this ? I don't have a clue where to find the cause
of the linking problems so i can solve it.
If you need more information, please check the appendix 1 & 2 here below.
If these isn't sufficient enough, please inform me which information i can
provide.
Sincerely
- kg
*APPENDIX 1: output of cmake command*
D:\kaa\kaa-cpp-ep-sdk-aXrMkhHEE2BrPBehV_Vbxym2MfU\build>cmake -G "NMake
> Makefiles" -DKAA_INSTALL_PATH="D:\kaa\kaaSDK" -DKAA_DEBUG_ENABLED=1 ..
> ==================================
> CMake Warning (dev) at CMakeLists.txt:73 (if):
> Policy CMP0054 is not set: Only interpret if() arguments as variables or
> keywords when unquoted. Run "cmake --help-policy CMP0054" for policy
> details. Use the cmake_policy command to set the policy and suppress
> this
> warning.
>
> Quoted variables like "MSVC" will no longer be dereferenced when the
> policy
> is set to NEW. Since the policy is not set the OLD behavior will be
> used.
> This warning is for project developers. Use -Wno-dev to suppress it.
>
> ==================================
> KAA_MAX_LOG_LEVEL=6
> EVENTS ENABLED
> NOTIFICATIONS ENABLED
> CONFIGURATION ENABLED
> LOGGING ENABLED
> OPERATION_TCP_CHANNEL ENABLED
> OPERATION_LONG_POLL_CHANNEL ENABLED
> OPERATION_HTTP_CHANNEL ENABLED
> BOOTSTRAP_HTTP_CHANNEL ENABLED
> CONNECTIVITY_CHECKER ENABLED
> KAA_THREADSAFE ENABLED
> ==================================
> -- Boost version: 1.60.0
> -- Found the following Boost libraries:
> -- log
> -- system
> -- thread
> -- date_time
> -- log_setup
> -- filesystem
> -- regex
> -- chrono
> -- atomic
>
> Looking for Avro C++ headers and libraries
> -- Root dir: D:/kaa/kaaBuild/avro_1.8.0/lang/c++
> -- Include directories: D:/kaa/kaaBuild/avro_1.8.0/lang/c++/avro
> -- Libraries: D:/kaa/kaaBuild/avro_1.8.0/lang/c++/build.win
> -- FindBotan check
> -- BOTAN_HOME is not empty: "D:/kaa/kaaBuild/botan-1.11.29"
> -- Looking for botan in D:/kaa/kaaBuild/botan-1.11.29
> -- Include directory: D:/kaa/kaaBuild/botan-1.11.29/build/include
> -- Library: D:/kaa/kaaBuild/botan-1.11.29/botan.lib
>
> checking libraries
> --- BOTAN: Found? YES
> D:/kaa/kaaBuild/botan-1.11.29/botan.lib
> --- AVRO: Found? TRUE
> D:/kaa/kaaBuild/avro_1.8.0/lang/c++/build.win
> --- BOOST: Found?
>
> optimizedD:/software/boost_1_60_32/lib32-msvc-14.0/boost_log-vc140-mt-1_60.libdebugD:/software/boost_1_60_32/lib32-msvc-14.0/boost_log-vc140-mt-gd-1_60.liboptimizedD:/software/boost_1_60_32/lib32-msvc-14.0/boost_system-vc140-mt-1_60.libdebugD:/software/boost_1_60_32/lib32-msvc-14.0/boost_system-vc140-mt-gd-1_60.liboptimizedD:/software/boost_1_60_32/lib32-msvc-14.0/boost_thread-vc140-mt-1_60.libdebugD:/software/boost_1_60_32/lib32-msvc-14.0/boost_thread-vc140-mt-gd-1_60.liboptimizedD:/software/boost_1_60_32/lib32-msvc-14.0/boost_date_time-vc140-mt-1_60.libdebugD:/software/boost_1_60_32/lib32-msvc-14.0/boost_date_time-vc140-mt-gd-1_60.liboptimizedD:/software/boost_1_60_32/lib32-msvc-14.0/boost_log_setup-vc140-mt-1_60.libdebugD:/software/boost_1_60_32/lib32-msvc-14.0/boost_log_setup-vc140-mt-gd-1_60.liboptimizedD:/software/boost_1_60_32/lib32-msvc-14.0/boost_filesystem-vc140-mt-1_60.libdebugD:/software/boost_1_60_32/lib32-msvc-14.0/boost_filesystem-vc140-mt-gd-1_60.liboptimizedD:/software/boost_1_60_32/lib32-msvc-14.0/boost_regex-vc140-mt-1_60.libdebugD:/software/boost_1_60_32/lib32-msvc-14.0/boost_regex-vc140-mt-gd-1_60.liboptimizedD:/software/boost_1_60_32/lib32-msvc-14.0/boost_chrono-vc140-mt-1_60.libdebugD:/software/boost_1_60_32/lib32-msvc-14.0/boost_chrono-vc140-mt-gd-1_60.liboptimizedD:/software/boost_1_60_32/lib32-msvc-14.0/boost_atomic-vc140-mt-1_60.libdebugD:/software/boost_1_60_32/lib32-msvc-14.0/boost_atomic-vc140-mt-gd-1_60.lib
> done checking libraries
>
> -- KAA WILL BE INSTALLED TO C:/Program Files (x86)/Kaa-cpp
> -- Configuring done
> WARNING: Target "kaacpp" requests linking to directory
> "D:/kaa/kaaBuild/avro_1.8.0/lang/c++/build.win". Targets may link only to
> libraries. CMake is dropping the item.
> -- Generating done
> -- Build files have been written to:
> D:/kaa/kaa-cpp-ep-sdk-aXrMkhHEE2BrPBehV_Vbxym2MfU/build
>
*APPENDIX 2: cmakelists.txt file*
File consists of 300+ lines, so uploaded it. See upload on my google drive:
https://drive.google.com/open?id=0B-1WvUfrCC3MUHR5dGZmVUdhY0U
// EOF
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/cmake/attachments/20160330/130691ee/attachment-0001.html>
More information about the CMake
mailing list