[CMake] Help using CMake & Expat in Windows

Stefan Buschmann s_buschmann at gmx.de
Fri Jul 30 18:59:36 EDT 2010


Hi!

Am 30.07.2010 22:23, schrieb Clark Taylor:
> I have created a very simple CMake file (I am a newbie) that works 
> wonderfully in Linux, but am having problems in Windows.  The 
> CMakeLists.txt is below
> #I think 2.6 is required for some of things I do below, but I am not sure
> CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
> # This is the CMake file for my application.  This
> # will be my first CMake file of decent size, so please excuse
> # any particularly bad syntax :)
> PROJECT(MyApp)
> FIND_PACKAGE(wxWidgets REQUIRED)
> FIND_PACKAGE(OpenCV REQUIRED)
> FIND_PACKAGE(EXPAT REQUIRED)
> INCLUDE (${wxWidgets_USE_FILE} ${OpenCV_USE_FILE} ${EXPAT_INCLUDE_DIRS})
This looks wrong. INCLUDE() includes another file into your cmake 
script, it does not set the include directories for the compiler. This 
is what include_directories() is for. I guess it may be right for 
wxWidgets_USE_FILE and OpenCV_USE_FILE, if their cmake-modules create 
files that shall be included directly into your CMake script. But 
EXPAT_INCLUDE_DIRS is a variable that contains the path to the header 
files, so you should use the following to let the compiler know about it:
   include_directories(${EXPAT_INCLUDE_DIRS})

> SET(Headers myApp.h myAppGUI.h myAppGUImpl.h Coordinates/Coordinates.h)
> SET(Src myApp.cpp myAppGUI.cpp myAppGUImpl.cpp 
> Coordinates/Coordinates.cpp)
>
> ADD_EXECUTABLE(myApp ${Headers} ${Src})
You should not need to add ${Headers} here (usually only the sources 
should be compiled).

> TARGET_LINK_LIBRARIES(myApp ${wxWidgets_LIBRARIES} ${OpenCV_LIBS} 
> ${EXPAT_LIBRARIES})
>
> #End of code
> Everything works great in Linux, but when I try to use this in 
> Windows, I have series of problems, all inter-related.
> Problem #1.  While wxWidgets and OpenCV work seamlessly, Cmake can't 
> find the expat libraries.  (They are installed.  I installed the 
> expat libraries using the basic windows download and install package).
> Problem #2.  While I can overcome problem #1 by hardcoding in where 
> the expat include directory and library files are (setting the values 
> in the CMake GUI), when I then open up the resulting solution in 
> Visual Studio 2008 Express and compile my code, the compiler gives the 
> error "can't find expat.h"
> Problem #3.  I can fix that problem as well by directly modifying the 
> solution properties, but then when I run the project, it dies because 
> it can't find libexpat.dll.
> So, in summary, I think cmake is completely ignoring libexpat, even 
> when I explicitly tell it (in the gui) where the include and library 
> files are.
> Any ideas?
If this doesn't help, try to determine whether the variables are set 
correctly, e.g. by using message(${EXPAT_INCLUDE_DIRS}) to print it's 
content when cmake is run. But you should already get an error message 
if the required libraries could not be found...

> Sorry if this is an extremely stupid question, but I did not find any 
> related information on Google, so.....  Hopefully this will help make 
> me a more intelligent user of CMake :)
Hope it helps :)

Stefan

> -- 
> Clark
>
>
> _______________________________________________
> 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

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.cmake.org/pipermail/cmake/attachments/20100731/1a73ae69/attachment.htm>


More information about the CMake mailing list