[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