I'm either completely misunderstanding how the CMake command "include_directories" works
or something in my Windows MinGW/CMake (2.8.8) is not working.

BACKGROUND:

http://www.cmake.org/cmake/help/v2.8.8/cmake.html#command:include_directories
specifies:

"Add the given directories to those the compiler uses to search for include files."

I'm working on a project that compiles in Linux and I am trying
to get it to compile on Windows using MinGW.  The open source project
is Scribus - a layout program much like Adobe PageMaker and Adobe InDesign.

The Scribus project uses CMake.

I've confirmed that in the topmost CMakeLists.txt file of the Scribus source
code, there is the dependency project Cairo [graphics]
and that Cairo has as its destination "include" directory "/build32/include/cairo" specified. Moreover, at the end of the CMake Configure, I have a MESSAGE statement that displays the value of INCLUDE_DIRECTORIES, and indeed "/build32/include/cairo"
is therein.

I added a SET statement, just in case, to the topmost Scribus source CMakeLists.txt file:

  MESSAGE("Finding CAIRO...")
  FIND_PACKAGE(CAIRO)
  IF(CAIRO_FOUND)
   MESSAGE("CAIRO Library Found OK")
  SET(CAIRO_INCLUDE_DIR /local32/include/cairo)
  MESSAGE("Setting CAIRO_INCLUDE_DIR = ${CAIRO_INCLUDE_DIR}")

and the MESSAGE statement duly produces the expected result
at Configure time in the CMake GUI (invoked with "mingw32-make edit_cache"):

   Finding CAIRO...
   CAIRO Library Found OK
   Setting CAIRO_INCLUDE_DIR = /local32/include/cairo

Near the very end of the Configure session,
I also print out what the INCLUDE_DIRECTORIES
has just to make sure something has not altered.  My understanding
is that INCLUDE_DIRECTORIES is like a hash table that you continue
to append to and that nothing is deleted from it and that it's values
will appear (or made available to?) on the compile command line.

Here's the code the shows what the value is near the completion of Configure:

   get_property(inc_dirs DIRECTORY PROPERTY INCLUDE_DIRECTORIES)
   message("inc_dirs = ${inc_dirs}")

and here is the result:

inc_dirs = C:/QT/4.8.2/include;C:/QT/4.8.2/include/QtOpenGL;C:/QT/4.8.2/include/QtWebKit;C:/QT/4.8.2/include/QtGui;C:/QT/4.8.2/include/QtXml;C:/QT/4.8.2/include/QtNetwork;C:/QT/4.8.2/include/QtCore;/local32/include/freetype2;C:/MinGW1/build32/scribus32;C:/MinGW1/build32/scribus32/scribus;C:/QT/4.8.2/include/ActiveQt;C:/QT/4.8.2/include/ActiveQt;C:/QT/4.8.2/include/QtDesigner;C:/QT/4.8.2/include/ActiveQt;C:/QT/4.8.2/include/ActiveQt;C:/QT/4.8.2/include/QtDeclarative;C:/QT/4.8.2/include/QtScriptTools;C:/QT/4.8.2/include/QtDBus;C:/QT/4.8.2/include/QtDesigner;C:/QT/4.8.2/include/QtXml;C:/QT/4.8.2/include/QtSql;C:/QT/4.8.2/include/QtOpenGL;C:/QT/4.8.2/include/QtMultimedia;C:/QT/4.8.2/include/QtNetwork;C:/QT/4.8.2/include/phonon;C:/QT/4.8.2/include/QtXmlPatterns;C:/QT/4.8.2/include/QtWebKit;C:/QT/4.8.2/include/QtHelp;C:/QT/4.8.2/include/QtUiTools;C:/QT/4.8.2/include/QtTest;C:/QT/4.8.2/include/QtScript;C:/QT/4.8.2/include/QtSvg;C:/QT/4.8.2/include/Qt3Support;C:/QT/4.8.2/include/QtGui;C:/QT/4.8.2/include/QtCore;C:/QT/4.8.2/mkspecs/default;C:/QT/4.8.2/include;C:/QT/4.8.2/include/QtCore;/local32/include/cairo;/local32/include;C:/MinGW1/build32/lcms2-2.3/include;C:/MinGW1/local32/include/libxml2;C:/MinGW1/local32/include;C:/MinGW1/local32/bin

What I am seeing is that although Configure reports the inclusion
of the Cairo "include" directory, the path, nor any of the paths, does not show up in the
code that ultimately gets compiled.

QUESTION: How do I specify an include directory path that will appear on the command line at compilation time?

EXAMPLES:
The file C:\MinGW1\build32\scribus32\CMakeFiles\build.make has:
========================== START ===========================
scribus/CMakeFiles/scribusSVN.dir/pageitem.cpp.obj: C:/MinGW1/build32/scribusSVN/scribus/pageitem.cpp $(CMAKE_COMMAND) -E cmake_progress_report C:\MinGW1\build32\scribus32\CMakeFiles $(CMAKE_PROGRESS_786) @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Building CXX object scribus/CMakeFiles/scribusSVN.dir/pageitem.cpp.obj" cd /d C:\MinGW1\build32\scribus32\scribus && C:\MinGW1\mingw32\bin\g++.exe $(CXX_DEFINES) $(CXX_FLAGS) -DCOMPILE_SCRIBUS_MAIN_APP -o CMakeFiles\scribusSVN.dir\pageitem.cpp.obj -c C:\MinGW1\build32\scribusSVN\scribus\pageitem.cpp

scribus/CMakeFiles/scribusSVN.dir/pageitem.cpp.i: cmake_force
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/scribusSVN.dir/pageitem.cpp.i" cd /d C:\MinGW1\build32\scribus32\scribus && C:\MinGW1\mingw32\bin\g++.exe $(CXX_DEFINES) $(CXX_FLAGS) -DCOMPILE_SCRIBUS_MAIN_APP -E C:\MinGW1\build32\scribusSVN\scribus\pageitem.cpp > CMakeFiles\scribusSVN.dir\pageitem.cpp.i

scribus/CMakeFiles/scribusSVN.dir/pageitem.cpp.s: cmake_force
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/scribusSVN.dir/pageitem.cpp.s" cd /d C:\MinGW1\build32\scribus32\scribus && C:\MinGW1\mingw32\bin\g++.exe $(CXX_DEFINES) $(CXX_FLAGS) -DCOMPILE_SCRIBUS_MAIN_APP -S C:\MinGW1\build32\scribusSVN\scribus\pageitem.cpp -o CMakeFiles\scribusSVN.dir\pageitem.cpp.s

scribus/CMakeFiles/scribusSVN.dir/pageitem.cpp.obj.requires:
.PHONY : scribus/CMakeFiles/scribusSVN.dir/pageitem.cpp.obj.requires

scribus/CMakeFiles/scribusSVN.dir/pageitem.cpp.obj.provides: scribus/CMakeFiles/scribusSVN.dir/pageitem.cpp.obj.requires $(MAKE) -f scribus\CMakeFiles\scribusSVN.dir\build.make scribus/CMakeFiles/scribusSVN.dir/pageitem.cpp.obj.provides.build
.PHONY : scribus/CMakeFiles/scribusSVN.dir/pageitem.cpp.obj.provides

scribus/CMakeFiles/scribusSVN.dir/pageitem.cpp.obj.provides.build: scribus/CMakeFiles/scribusSVN.dir/pageitem.cpp.obj

========================== END ============================

my execution of " mingw32-make scribusSVN VERBOSE=1" concludes with this error:

========================== START ==========================
Building CXX object scribus/CMakeFiles/scribusSVN.dir/pageitem.cpp.obj
cd /d C:\MinGW1\build32\scribus32\scribus && C:\MinGW1\mingw32\bin\g++.exe -DscribusSVN_EXPORTS -DNDEBUG -DWIN32_LEAN_AND_MEAN -DAVOID_WIN32_FILEIO -D_CRT_SECURE_NO_DEPRECATE -D_USE_MATH_DEFINES -DCOMPILE_PLUGIN_AS_DLL -DQT_DLL -DQT_OPENGL_LIB -DQT_WEBKIT_LIB -DQT_GUI_LIB -DQT_XML_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DQT_DLL -DQT_CORE_LIB -DQT_GUI_LIB -DQT_THREAD_LIB -DQT_XML_LIB -DQT_GL_LIB -DHAVE_UNISTD_H -DHAVE_CONFIG_H -DQT_DLL -DQT_NO_DEBUG -I/local32/include -mms-bitfields -mthreads -mtune=pentium3 -O2 -Wall -fPIC @CMakeFiles/scribusSVN.dir/includes_CXX.rsp -DSHAREDIR=\"D:/ScribusOut/share/scribus/\" -DDOCDIR=\"D:/ScribusOut/share/doc/\" -DICONDIR=\"D:/ScribusOut/share/icons/\" -DSAMPLESDIR=\"D:/ScribusOut/share/scribus/samples/\" -DSCRIPTSDIR=\"D:/ScribusOut/share/scribus/scripts/\" -DTEMPLATEDIR=\"D:/ScribusOut/share/templates/\" -DDESKTOPDIR=\"D:/ScribusOut/share/applications/\" -DLIBDIR=\"D:/ScribusOut/lib/scribus/\" -DPLUGINDIR=\"D:/ScribusOut/plugins\" -DCOMPILE_SCRIBUS_MAIN_APP -o CMakeFiles\scribusSVN.dir\pageitem.cpp.obj -c C:\MinGW1\build32\scribusSVN\scribus\pageitem.cpp C:\MinGW1\build32\scribusSVN\scribus\pageitem.cpp:1:0: warning: -fPIC ignored for target (all code is position independent) [enabled by default] C:\MinGW1\build32\scribusSVN\scribus\pageitem.cpp:84:19: fatal error: cairo.h: No such file or directory
compilation terminated.
mingw32-make[3]: *** [scribus/CMakeFiles/scribusSVN.dir/pageitem.cpp.obj] Error 1
mingw32-make[3]: Leaving directory `C:/MinGW1/build32/scribus32'
mingw32-make[2]: *** [scribus/CMakeFiles/scribusSVN.dir/all] Error 2
mingw32-make[2]: Leaving directory `C:/MinGW1/build32/scribus32'
mingw32-make[1]: *** [scribus/CMakeFiles/scribusSVN.dir/rule] Error 2
mingw32-make[1]: Leaving directory `C:/MinGW1/build32/scribus32'
mingw32-make: *** [scribusSVN] Error 2
jlpoole@jlpoole-PC /build32/scribus32$
========================== END ============================

What causes the compilation of pageitem.cpp to work is to have present
as a command parameter "I/local32/include/cairo".

Here is a slighty modified version (changing the back slash to forward slash) confirming
the failure to compile:
+++++++++++++++++++++++++ START ++++++++++++++++++++++++++++
jlpoole@jlpoole-PC /build32/scribus32$ cd /build32/scribus32/scribus && /mingw32/bin/g++.exe -DscribusSVN_EXPORTS -DNDEBUG -DWIN32_LEAN_AND_MEAN -DAVOID_WIN32_FILEIO -D_CRT_SECURE_NO_ DEPRECATE -D_USE_MATH_DEFINES -DCOMPILE_PLUGIN_AS_DLL -DQT_DLL -DQT_OPENGL_LIB -DQT_WEBKIT_LIB -DQT_GUI_LIB -DQT_XML_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DQT_DLL -DQT_C ORE_LIB -DQT_GUI_LIB -DQT_THREAD_LIB -DQT_XML_LIB -DQT_GL_LIB -DHAVE_UNISTD_H -DHAVE_CONFIG_H -DQT_DLL -DQT_NO_DEBUG -I/local32/include -mms-bitfields -mthreads -mtune =pentium3 -O2 -Wall -fPIC @CMakeFiles/scribusSVN.dir/includes_CXX.rsp -DSHAREDIR=\"D:/ScribusOut/share/scribus/\" -DDOCDIR=\"D:/ScribusOut/share/doc/\" -DICONDIR=\" D:/ScribusOut/share/icons/\" -DSAMPLESDIR=\"D:/ScribusOut/share/scribus/samples/\" -DSCRIPTSDIR=\"D:/ScribusOut/share/scribus/scripts/\" -DTEMPLATEDIR=\"D:/ScribusOut/ share/templates/\" -DDESKTOPDIR=\"D:/ScribusOut/share/applications/\" -DLIBDIR=\"D:/ScribusOut/lib/scribus/\" -DPLUGINDIR=\"D:/ScribusOut/plugins\" -DCOMPILE_SCRIBUS_M AIN_APP -o CMakeFiles/scribusSVN.dir/pageitem.cpp.obj -c C:/MinGW1/build32/scribusSVN/scribus/pageitem.cpp C:/MinGW1/build32/scribusSVN/scribus/pageitem.cpp:1:0: warning: -fPIC ignored for target (all code is position independent) [enabled by default] C:/MinGW1/build32/scribusSVN/scribus/pageitem.cpp:84:19: fatal error: cairo.h: No such file or directory
compilation terminated.
++++++++++++++++++++++++++ END ++++++++++++++++++++++++++++

Here is the same code, but I have added as the first parameter "-I/local32/include/cairo":

+++++++++++++++++++++++++ START ++++++++++++++++++++++++++++
jlpoole@jlpoole-PC /build32/scribus32/scribus$ cd /build32/scribus32/scribus && /mingw32/bin/g++.exe -I/local32/include/cairo -DscribusSVN_EXPORTS -DNDEBUG -DWIN32_LEAN_AND_MEAN -DAVOID_WIN32 _FILEIO -D_CRT_SECURE_NO_DEPRECATE -D_USE_MATH_DEFINES -DCOMPILE_PLUGIN_AS_DLL -DQT_DLL -DQT_OPENGL_LIB -DQT_WEBKIT_LIB -DQT_GUI_LIB -DQT_XML_LIB -DQT_NETWORK_LIB -DQT _CORE_LIB -DQT_DLL -DQT_CORE_LIB -DQT_GUI_LIB -DQT_THREAD_LIB -DQT_XML_LIB -DQT_GL_LIB -DHAVE_UNISTD_H -DHAVE_CONFIG_H -DQT_DLL -DQT_NO_DEBUG -I/local32/include -mms-b itfields -mthreads -mtune=pentium3 -O2 -Wall -fPIC @CMakeFiles/scribusSVN.dir/includes_CXX.rsp -DSHAREDIR=\"D:/ScribusOut/share/scribus/\" -DDOCDIR=\"D:/ScribusOut/ share/doc/\" -DICONDIR=\"D:/ScribusOut/share/icons/\" -DSAMPLESDIR=\"D:/ScribusOut/share/scribus/samples/\" -DSCRIPTSDIR=\"D:/ScribusOut/share/scribus/scripts/\" -DTEM PLATEDIR=\"D:/ScribusOut/share/templates/\" -DDESKTOPDIR=\"D:/ScribusOut/share/applications/\" -DLIBDIR=\"D:/ScribusOut/lib/scribus/\" -DPLUGINDIR=\"D:/ScribusOut/plug ins\" -DCOMPILE_SCRIBUS_MAIN_APP -o CMakeFiles/scribusSVN.dir/pageitem.cpp.obj -c C:/MinGW1/build32/scribusSVN/scribus/pageitem.cpp C:/MinGW1/build32/scribusSVN/scribus/pageitem.cpp:1:0: warning: -fPIC ignored for target (all code is position independent) [enabled by default]

C:/MinGW1/build32/scribusSVN/scribus/pageitem.cpp: In member function 'virtual void PageItem::restore(UndoState*, bool)': C:/MinGW1/build32/scribusSVN/scribus/pageitem.cpp:4657:8: warning: unused variable 'dummy' [-Wunused-variable] C:/MinGW1/build32/scribusSVN/scribus/pageitem.cpp: In member function 'void PageItem::restorePStyle(SimpleState*, bool)': C:/MinGW1/build32/scribusSVN/scribus/pageitem.cpp:6458:6: warning: variable 'styleid' set but not used [-Wunused-but-set-variable] C:/MinGW1/build32/scribusSVN/scribus/pageitem.cpp: In member function 'void PageItem::restoreGradientMeshColor(SimpleState*, bool)': C:/MinGW1/build32/scribusSVN/scribus/pageitem.cpp:5747:48: warning: 'mp' may be used uninitialized in this function [-Wmaybe-uninitialized]
In file included from C:/QT/4.8.2/include/QtGui/qcolor.h:1:0,
from C:/QT/4.8.2/include/QtGui/../../src/gui/kernel/qpalette.h:46,
                 from C:/QT/4.8.2/include/QtGui/qpalette.h:1,
from C:/QT/4.8.2/include/QtGui/../../src/gui/kernel/qwidget.h:49,
                 from C:/QT/4.8.2/include/QtGui/qwidget.h:1,
                 from C:/QT/4.8.2/include/QtGui/QWidget:1,
                 from C:/MinGW1/build32/scribusSVN/scribus/pageitem.h:28,
                 from C:/MinGW1/build32/scribusSVN/scribus/pageitem.cpp:24:
C:/QT/4.8.2/include/QtGui/../../src/gui/painting/qcolor.h: In member function 'void PageItem::setMeshPointColor(int, int, QString, int, double, bool)': C:/QT/4.8.2/include/QtGui/../../src/gui/painting/qcolor.h:293:27: warning: 'mp' may be used uninitialized in this function [-Wmaybe-uninitialized] C:/MinGW1/build32/scribusSVN/scribus/pageitem.cpp:3019:13: note: 'mp' was declared here
jlpoole@jlpoole-PC /build32/scribus32/scribus$
++++++++++++++++++++++++++ END ++++++++++++++++++++++++++++

The above demonstrates that the header was resolved, albeit there are some warnings, and the
object file created:

jlpoole@jlpoole-PC /build32/scribus32/scribus$ ls -la CMakeFiles/scribusSVN.dir/pageitem.cpp.obj -rw-r--r-- 1 jlpoole Administrators 1462256 Aug 2 12:36 CMakeFiles/scribusSVN.dir/pageitem.cpp.obj
jlpoole@jlpoole-PC /build32/scribus32/scribus$







<<attachment: jlpoole56.vcf>>

--

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

Reply via email to