Quantcast

CMake does not find an header file, and ignores the classes found in several other header files.

classic Classic list List threaded Threaded
6 messages Options
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

CMake does not find an header file, and ignores the classes found in several other header files.

Toronto Andrew
This post was updated on .
The following is my CMakeLists file:

PROJECT(CppSampleQt01)
FIND_PACKAGE(Qt4 REQUIRED)

FIND_LIBRARY(SIMPLONLIB lv.simplon lib)
FIND_LIBRARY(SIMPLONIMGPROC lv.simplon.imgproc lib)

SET(CppSampleQt01_SOURCES include/lv.simplon.class.cpp camera.cpp main.cpp mainwindow.cpp osdep.cpp paint.cpp)
SET(CppSampleQt01_HEADERS include/lv.simplon.class.h camera.h mainwindow.h osdep.h paint.h)
SET(CppSampleQt01_RESOURCES icons.qrc)

SET(QExtSerialPort_HEADERS QExtSerialPort/src/qextwineventnotifier_p.h
                                                QExtSerialPort/src/qextserialport_p.h
                                                QExtSerialPort/src/qextserialport_global.h
                                                QExtSerialPort/src/qextserialport.h
                                                QExtSerialPort/src/qextserialenumerator_p.h
                                                QExtSerialPort/src/qextserialenumerator.h)
SET(QExtSerialPort_SOURCES QExtSerialPort/src/qextserialenumerator.cpp
                                        QExtSerialPort/src/qextserialport.cpp
                                        QExtSerialPort/src/qextwineventnotifier_p.cpp)
                                       
if (WIN32)
        SET(QExtSerialPort_SOURCES ${QExtSerialPort_SOURCES} QExtSerialPort/src/qextserialport_win.cpp)
        #  add_definitions(-DWINVER=0x0501) # needed for mingw (dbt business??
        LINK_LIBRARIES(${QT_QTGUI_LIBRARY} setupapi advapi32 user32)
endif(WIN32)

if (UNIX)
        SET(QExtSerialPort_SOURCES ${QExtSerialPort_SOURCES} QExtSerialPort/src/qextserialport_unix.cpp)
endif (UNIX)

if (OSX)
        LINK_LIBRARIES(framework IOKit)
        SET(QExtSerialPort_SOURCES ${QExtSerialPort_SOURCES} QExtSerialPort/src/qextserialport_osx.cpp)
endif (OSX)

QT4_WRAP_CPP(CppSampleQt01_HEADERS_MOC ${CppSampleQt01_HEADERS} ${QExtSerialPort_HEADERS})
       
INCLUDE(${QT_USE_FILE})
ADD_DEFINITIONS(${QT_DEFINITIONS})

ADD_EXECUTABLE(CppSampleQt01 ${CppSampleQt01_SOURCES}
                                ${QExtSerialPort_SOURCES}
                                ${CppSampleQt01_HEADERS_MOC}
                                ${CppSampleQt01_RESOURCES_RCC})

TARGET_LINK_LIBRARIES(CppSampleQt01 ${QT_LIBRARIES} ${SIMPLONLIB} ${SIMPLONIMGPROC})
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR} include QExtSerialPort/src)


And within the QExtSerialPort/src folder you find all the files under QExtSerialPort_HEADERS and SOURCES.
However, I get these:

QExtSerialPort/src/qextserialport_p.h(0): Note: No relevant classes found. No output generated.
//This does contain a class' declarations.

QExtSerialPort/src/qextserialport_global.h(0): Note: No relevant classes found. No output generated.

//This too contains a class' declarations.

QExtSerialPort/src/qextserialenumerator_p.h(0): Note: No relevant classes found. No output generated.

//Same thing.

qextserialport\src\moc_qextserialport.cpp(10): fatal error C1083: Cannot open include file: '../../../src/qextserialport.h': No such file or directory.

//When there is a qextserialport.h file in the QExtSerialPort/src folder.

Any input at all would be incredible, I have been mulling over this for quite some time now.
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: CMake does not find an header file, and ignores the classes found in several other header files.

Rolf Eike Beer
Am Freitag, 3. August 2012, 11:31:44 schrieb Toronto Andrew:

> The following is my CMakeLists file:
>
> PROJECT(CppSampleQt01)
> FIND_PACKAGE(Qt4 REQUIRED)
>
> FIND_LIBRARY(SIMPLONLIB lv.simplon lib)
> FIND_LIBRARY(SIMPLONIMGPROC lv.simplon.imgproc lib)
>
> SET(CppSampleQt01_SOURCES include/lv.simplon.class.cpp camera.cpp main.cpp
> mainwindow.cpp osdep.cpp paint.cpp)
> SET(CppSampleQt01_HEADERS include/lv.simplon.class.h camera.h mainwindow.h
> osdep.h paint.h)
> SET(CppSampleQt01_RESOURCES icons.qrc)
>
> SET(QExtSerialPort_HEADERS QExtSerialPort/src/qextwineventnotifier_p.h
> QExtSerialPort/src/qextserialport_p.h
> QExtSerialPort/src/qextserialport_global.h
> QExtSerialPort/src/qextserialport.h
> QExtSerialPort/src/qextserialenumerator_p.h
> QExtSerialPort/src/qextserialenumerator.h)
> SET(QExtSerialPort_SOURCES QExtSerialPort/src/qextserialenumerator.cpp
> QExtSerialPort/src/qextserialport.cpp
> QExtSerialPort/src/qextwineventnotifier_p.cpp)
>
> if (WIN32)
> SET(QExtSerialPort_SOURCES ${QExtSerialPort_SOURCES}
> QExtSerialPort/src/qextserialport_win.cpp)
list(APPEND QExtSerialPort_SOURCES QExtSerialPort/src/qextserialport_win.cpp)

> #  add_definitions(-DWINVER=0x0501) # needed for mingw (dbt business??
> LINK_LIBRARIES(${QT_QTGUI_LIBRARY} setupapi advapi32 user32)
> endif(WIN32)
>
> if (UNIX)

elseif?

> SET(QExtSerialPort_SOURCES ${QExtSerialPort_SOURCES}
> QExtSerialPort/src/qextserialport_unix.cpp)
> endif (UNIX)
>
> if (OSX)
> LINK_LIBRARIES(framework IOKit)
> SET(QExtSerialPort_SOURCES ${QExtSerialPort_SOURCES}
> QExtSerialPort/src/qextserialport_osx.cpp)
> endif (OSX)
>
> QT4_WRAP_CPP(CppSampleQt01_HEADERS_MOC ${CppSampleQt01_HEADERS}
> ${QExtSerialPort_HEADERS})
>
> INCLUDE(${QT_USE_FILE})
> ADD_DEFINITIONS(${QT_DEFINITIONS})
>
> ADD_EXECUTABLE(CppSampleQt01 ${CppSampleQt01_SOURCES}
> ${QExtSerialPort_SOURCES}
> ${CppSampleQt01_HEADERS_MOC}
> ${CppSampleQt01_RESOURCES_RCC})
>
> TARGET_LINK_LIBRARIES(CppSampleQt01 ${QT_LIBRARIES} ${SIMPLONLIB}
> ${SIMPLONIMGPROC})
> INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR} include QExtSerialPort/src)
This is likely source of the trouble: only targets after the
include_directories() line will see it. So you should move it up before the
add_executable. Also you just pass "include" here, i.e. every compiler
invocation may interpret that relative to it's current directory. You should
use absolute paths there, e.g. "${CMAKE_CURRENT_BINARY_DIR}/include".

> And within the QExtSerialPort/src folder you find all the files under
> QExtSerialPort_HEADERS and SOURCES.
> However, I get these:
>
> QExtSerialPort/src/qextserialport_p.h(0): Note: No relevant classes found.
> No output generated.
> //This does contain a class' declarations.
> QExtSerialPort/src/qextserialport_global.h(0): Note: No relevant classes
> found. No output generated.
> //This too contains a class' declarations.
> QExtSerialPort/src/qextserialenumerator_p.h(0): Note: No relevant classes
> found. No output generated.
> //Same thing.
You pass it to QT4_WRAP_CPP, so moc tries to run on it. Either don't do it or
just ignore these lines.

Eike
--

Powered by www.kitware.com

Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html

Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ

Follow this link to subscribe/unsubscribe:
http://www.cmake.org/mailman/listinfo/cmake

signature.asc (205 bytes) Download Attachment
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: CMake does not find an header file, and ignores the classes found in several other header files.

Toronto Andrew
Hello, thank you for looking at my CMake issues! I really appreciate it :)

I fixed the major issue you mentioned (Moving INCLUDE_DIRECTORIES above ADD_EXECUTABLE), however this did not seem to fix anything. I still got the errors I was receiving prior to that change, and I used absolute paths when linking to the include directory within my source.

I fixed this qextserialport\src\moc_qextserialport.cpp(10): fatal error C1083: Cannot open include file: '../../../src/qextserialport.h': No such file or directory.  by linking to the absolute path in moc_qextserialport.cpp, which seemed to get rid of it, however it draws up these now:

2>build\x\QExtSerialPort\src\moc_qextserialport.cxx(97): error C2027: use of undefined type 'QextSerialPortPrivate'
2>  QExtSerialPort/src/qextserialport.h(167) : see declaration of 'QextSerialPortPrivate'
2>build\x\QExtSerialPort\src\moc_qextserialport.cxx(97): error C2227: left of '->_q_canRead' must point to class/struct/union/generic type


All these errors stem from a class in qextserialport_p.h (Recall: QExtSerialPort/src/qextserialport_p.h(0): Note: No relevant classes found. No output generated. still shows up),

So I guess the question is still how do I get the compiler to read these files? And why is it not reading them?

This is how the CMakeLists.txt file looks as it is right now:


PROJECT(CppSampleQt01)
FIND_PACKAGE(Qt4 REQUIRED)

FIND_LIBRARY(SIMPLONLIB lv.simplon lib)
FIND_LIBRARY(SIMPLONIMGPROC lv.simplon.imgproc lib)

SET(CppSampleQt01_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/include/lv.simplon.class.cpp camera.cpp main.cpp mainwindow.cpp osdep.cpp paint.cpp)
SET(CppSampleQt01_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/include/lv.simplon.class.h camera.h mainwindow.h osdep.h paint.h)
SET(CppSampleQt01_RESOURCES icons.qrc)

SET(QExtSerialPort_HEADERS QExtSerialPort/src/qextwineventnotifier_p.h
                                                QExtSerialPort/src/qextserialport_p.h
                                                QExtSerialPort/src/qextserialport_global.h
                                                QExtSerialPort/src/qextserialport.h
                                                QExtSerialPort/src/qextserialenumerator_p.h
                                                QExtSerialPort/src/qextserialenumerator.h)
SET(QExtSerialPort_SOURCES QExtSerialPort/src/qextserialenumerator.cpp
                                        QExtSerialPort/src/qextserialport.cpp
                                        QExtSerialPort/src/qextwineventnotifier_p.cpp)
                                       
if (WIN32)
        #Check syntax for this. QExt... may need to be wrapped in parentheses.
        LIST(APPEND QExtSerialPort_SOURCES QExtSerialPort/src/qextserialport_win.cpp)
        #SET(QExtSerialPort_SOURCES ${QExtSerialPort_SOURCES} QExtSerialPort/src/qextserialport_win.cpp)
        #  add_definitions(-DWINVER=0x0501) # needed for mingw (dbt business??
        LINK_LIBRARIES(${QT_QTGUI_LIBRARY} setupapi advapi32 user32)
endif(WIN32)

if (UNIX)
        LIST(APPEND QExtSerialPort_SOURCES QExtSerialPort/src/qextserialport_unix.cpp)
endif (UNIX)

if (OSX)
        LINK_LIBRARIES(framework IOKit)
        LIST(APPEND QExtSerialPort_SOURCES QExtSerialPort/src/qextserialport_osx.cpp)
endif (OSX)

QT4_WRAP_CPP(CppSampleQt01_HEADERS_MOC ${CppSampleQt01_HEADERS} ${QExtSerialPort_HEADERS})
       
INCLUDE(${QT_USE_FILE})
ADD_DEFINITIONS(${QT_DEFINITIONS})


INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include QExtSerialPort/src)
ADD_EXECUTABLE(CppSampleQt01 ${CppSampleQt01_SOURCES}
                                ${QExtSerialPort_SOURCES}
                                ${CppSampleQt01_HEADERS_MOC}
                                ${CppSampleQt01_RESOURCES_RCC})

TARGET_LINK_LIBRARIES(CppSampleQt01 ${QT_LIBRARIES} ${SIMPLONLIB} ${SIMPLONIMGPROC})


Once again, thank you guys!
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: CMake does not find an header file, and ignores the classes found in several other header files.

Rolf Eike Beer
Toronto Andrew wrote:

> Hello, thank you for looking at my CMake issues! I really appreciate it :)
>
> I fixed the major issue you mentioned (Moving INCLUDE_DIRECTORIES above
> ADD_EXECUTABLE), however this did not seem to fix anything. I still got the
> errors I was receiving prior to that change, and I used absolute paths when
> linking to the include directory within my source.
>
> I fixed this *qextserialport\src\moc_qextserialport.cpp(10): fatal error
> C1083: Cannot open include file: '../../../src/qextserialport.h': No such
> file or directory. * by linking to the absolute path in
> moc_qextserialport.cpp, which seemed to get rid of it, however it draws up
> these now:
>
> *2>build\x\QExtSerialPort\src\moc_qextserialport.cxx(97): error C2027: use
> of undefined type 'QextSerialPortPrivate'
> 2>  QExtSerialPort/src/qextserialport.h(167) : see declaration of
> 'QextSerialPortPrivate'
> 2>build\x\QExtSerialPort\src\moc_qextserialport.cxx(97): error C2227: left
> of '->_q_canRead' must point to class/struct/union/generic type*
From the filename I would expect the class to be named QExtSerialPortPrivate
(i.e. capital first E).

Sometimes it gets tricky to get the includes for the moc files right. One way
to prevent this is to include the moc file explicitely at the end of the cpp
file, i.e. #include "moc_qextserialport.cpp"

Eike
--

--

Powered by www.kitware.com

Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html

Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ

Follow this link to subscribe/unsubscribe:
http://www.cmake.org/mailman/listinfo/cmake

signature.asc (205 bytes) Download Attachment
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: CMake does not find an header file, and ignores the classes found in several other header files.

Toronto Andrew
Roike! I finally got it to run with a bit of manual linker error fixing!

I`ve one more question though:

CMake Warning at CMakeLists.txt:51 (ADD_EXECUTABLE):
  Cannot generate a safe linker search path for target CppSampleQt01 because
  there is a cycle in the constraint graph:

    dir 0 is [-DEIGEN_USE_NEW_STDVECTOR]
    dir 1 is [-DEIGEN_YES_I_KNOW_SPARSE_MODULE_IS_NOT_STABLE_YET]
    dir 2 is [-DBOOST_ALL_NO_LIB]
    dir 3 is [-DFLANN_STATIC]
    dir 4 is [ /arch:SSE2]
    dir 5 is [C:/Qt/lib]
      dir 13 must precede it due to link library [QtOpenGL4.lib]
    dir 6 is [C:/Program Files (x86)/PCL 1.6.0/3rdParty/Boost/lib]
    dir 7 is [C:/Program Files (x86)/PCL 1.6.0/lib]
    dir 8 is [C:/Program Files (x86)/OpenNI/Lib]
    dir 9 is [C:/Program Files (x86)/PCL 1.6.0/3rdParty/VTK/lib/vtk-5.8]
    dir 10 is [C:/Program Files (x86)/PCL 1.6.0/3rdParty/FLANN/lib]
    dir 11 is [C:/Program Files (x86)/PCL 1.6.0/3rdParty/Qhull/lib]
    dir 12 is [C:/SimplonSample2/lib]
    dir 13 is [C:/Qt/4.8.0/lib]
      dir 5 must precede it due to link library [QtGui4.lib]

  Some of these libraries may not be found correctly.


CMake Warning at CMakeLists.txt:51 (ADD_EXECUTABLE):
  Cannot generate a safe linker search path for target CppSampleQt01 because
  there is a cycle in the constraint graph:

    dir 0 is [-DEIGEN_USE_NEW_STDVECTOR]
    dir 1 is [-DEIGEN_YES_I_KNOW_SPARSE_MODULE_IS_NOT_STABLE_YET]
    dir 2 is [-DBOOST_ALL_NO_LIB]
    dir 3 is [-DFLANN_STATIC]
    dir 4 is [ /arch:SSE2]
    dir 5 is [C:/Qt/lib]
      dir 13 must precede it due to link library [QtOpenGLd4.lib]
    dir 6 is [C:/Program Files (x86)/PCL 1.6.0/3rdParty/Boost/lib]
    dir 7 is [C:/Program Files (x86)/PCL 1.6.0/lib]
    dir 8 is [C:/Program Files (x86)/OpenNI/Lib]
    dir 9 is [C:/Program Files (x86)/PCL 1.6.0/3rdParty/VTK/lib/vtk-5.8]
    dir 10 is [C:/Program Files (x86)/PCL 1.6.0/3rdParty/FLANN/lib]
    dir 11 is [C:/Program Files (x86)/PCL 1.6.0/3rdParty/Qhull/lib]
    dir 12 is [C:/SimplonSample2/lib]
    dir 13 is [C:/Qt/4.8.0/lib]
      dir 5 must precede it due to link library [QtGui4.lib]

  Some of these libraries may not be found correctly.


CMake Warning at CMakeLists.txt:51 (ADD_EXECUTABLE):
  Cannot generate a safe linker search path for target CppSampleQt01 because
  there is a cycle in the constraint graph:

    dir 0 is [-DEIGEN_USE_NEW_STDVECTOR]
    dir 1 is [-DEIGEN_YES_I_KNOW_SPARSE_MODULE_IS_NOT_STABLE_YET]
    dir 2 is [-DBOOST_ALL_NO_LIB]
    dir 3 is [-DFLANN_STATIC]
    dir 4 is [ /arch:SSE2]
    dir 5 is [C:/Qt/lib]
      dir 13 must precede it due to link library [QtOpenGLd4.lib]
    dir 6 is [C:/Program Files (x86)/PCL 1.6.0/3rdParty/Boost/lib]
    dir 7 is [C:/Program Files (x86)/PCL 1.6.0/lib]
    dir 8 is [C:/Program Files (x86)/OpenNI/Lib]
    dir 9 is [C:/Program Files (x86)/PCL 1.6.0/3rdParty/VTK/lib/vtk-5.8]
    dir 10 is [C:/Program Files (x86)/PCL 1.6.0/3rdParty/FLANN/lib]
    dir 11 is [C:/Program Files (x86)/PCL 1.6.0/3rdParty/Qhull/lib]
    dir 12 is [C:/SimplonSample2/lib]
    dir 13 is [C:/Qt/4.8.0/lib]
      dir 5 must precede it due to link library [QtGui4.lib]

This stuff pops up when I try to include VTK and PCL as well, and I`m not sure how to deal, any thoughts?

PROJECT(CppSampleQt01)

FIND_PACKAGE(PCL 1.3 REQUIRED)
FIND_PACKAGE(Qt4 REQUIRED)

FIND_LIBRARY(SIMPLONLIB lv.simplon lib)
FIND_LIBRARY(SIMPLONIMGPROC lv.simplon.imgproc lib)

SET(CppSampleQt01_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/include/lv.simplon.class.cpp camera.cpp main.cpp mainwindow.cpp osdep.cpp paint.cpp)
SET(CppSampleQt01_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/include/lv.simplon.class.h camera.h mainwindow.h osdep.h paint.h)
SET(CppSampleQt01_RESOURCES icons.qrc)

SET(QExtSerialPort_HEADERS QExtSerialPort/src/qextwineventnotifier_p.h
                                                QExtSerialPort/src/qextserialport_p.h
                                                QExtSerialPort/src/qextserialport_global.h
                                                QExtSerialPort/src/qextserialport.h
                                                QExtSerialPort/src/qextserialenumerator_p.h
                                                QExtSerialPort/src/qextserialenumerator.h)
SET(QExtSerialPort_SOURCES QExtSerialPort/src/qextserialenumerator.cpp
                                        QExtSerialPort/src/qextserialport.cpp
                                        QExtSerialPort/src/qextwineventnotifier_p.cpp)
                                       
if (WIN32)
        #Check syntax for this. QExt... may need to be wrapped in parentheses.
        LIST(APPEND QExtSerialPort_SOURCES QExtSerialPort/src/qextserialport_win.cpp)
        #SET(QExtSerialPort_SOURCES ${QExtSerialPort_SOURCES} QExtSerialPort/src/qextserialport_win.cpp)
        #  add_definitions(-DWINVER=0x0501) # needed for mingw (dbt business??
        LINK_LIBRARIES(${QT_QTGUI_LIBRARY} setupapi advapi32 user32)
endif(WIN32)

if (UNIX)
        LIST(APPEND QExtSerialPort_SOURCES QExtSerialPort/src/qextserialport_unix.cpp)
endif (UNIX)

if (OSX)
        LINK_LIBRARIES(framework IOKit)
        LIST(APPEND QExtSerialPort_SOURCES QExtSerialPort/src/qextserialport_osx.cpp)
endif (OSX)

QT4_WRAP_CPP(CppSampleQt01_HEADERS_MOC ${CppSampleQt01_HEADERS} ${QExtSerialPort_HEADERS})
       
FIND_PACKAGE(VTK REQUIRED)
INCLUDE(${VTK_USE_FILE})

INCLUDE(${QT_USE_FILE})
ADD_DEFINITIONS(${PCL_DEFINITIONS} ${QT_DEFINITIONS})

LINK_DIRECTORIES(${PCL_DEFINITIONS})

INCLUDE_DIRECTORIES( ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include QExtSerialPort/src )
ADD_EXECUTABLE(CppSampleQt01 ${CppSampleQt01_SOURCES}
                                ${QExtSerialPort_SOURCES}
                                ${CppSampleQt01_HEADERS_MOC}
                                ${CppSampleQt01_RESOURCES_RCC})

TARGET_LINK_LIBRARIES(CppSampleQt01 ${PCL_LIBRARIES} ${SIMPLONLIB} ${SIMPLONIMGPROC} QVTK)

PS: I owe you a beer whenever you are in Toronto! I really appreciate all the helpful info!
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: CMake does not find an header file, and ignores the classes found in several other header files.

Rolf Eike Beer
> ADD_DEFINITIONS(${PCL_DEFINITIONS} ${QT_DEFINITIONS})
>
> LINK_DIRECTORIES(${PCL_DEFINITIONS})

This combination is most likely wrong. Adding the same things as
compiler definitions as well as linker path entries would only be
correct when the variable is empty.

Also: don't use link_directories(). It's basically always causing
trouble. Very likely exactly the error you see. If the PCL module does
not return absolute paths to the libraries you need to link it is broken
and needs to be fixed.

Eike
--

Powered by www.kitware.com

Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html

Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ

Follow this link to subscribe/unsubscribe:
http://www.cmake.org/mailman/listinfo/cmake
Loading...