[CMake] cmake 2.6.0, breakages

Dmitry Marakasov amdmi3 at amdmi3.ru
Sat May 17 10:06:11 EDT 2008


Hi!

I've got some breakages after switch to CMake 2.6.0, and I'm not
sure how to fix those in a correct way. The app in question is
memonix:

http://www.viewizard.com/download/MemonixSourceCode_1.6_070713.zip

(I'm not related to authors of this software, but CMakeLists.txt
there is by me).

Here's the source:

--- CMakeLists.txt begins here ---
# project name
PROJECT(Memonix)

# depends
set(SDL_CONFIG "sdl-config" CACHE STRING "Path to sdl-config script")

FIND_PACKAGE(OpenGL REQUIRED)
IF(OPENGL_FOUND)
	INCLUDE_DIRECTORIES(${OPENGL_INCLUDE_DIR})
ELSE(OPENGL_FOUND)
	MESSAGE(FATAL "OpenGL not found")
ENDIF(OPENGL_FOUND)

FIND_PACKAGE(GLU REQUIRED)
FIND_PACKAGE(SDL REQUIRED)
FIND_PACKAGE(SDL_image REQUIRED)
FIND_PACKAGE(SDL_mixer REQUIRED)

# sources
FILE(GLOB_RECURSE memonix_SRCS *.cpp)

# targets
ADD_DEFINITIONS(`${SDL_CONFIG} --cflags`)
ADD_EXECUTABLE(Memonix ${memonix_SRCS})
TARGET_LINK_LIBRARIES(Memonix `${SDL_CONFIG} --libs` ${SDLIMAGE_LIBRARY} ${SDLMIXER_LIBRARY} ${OPENGL_gl_LIBRARY} ${GLU_LIBRARY})
--- CMakeLists.txt.orig ends here ---

First breakage is caused by using `sdl-config` in libs:

---
Linking CXX executable Memonix
c++: `sdl-config: No such file or directory
---

Obviously, `sdl-config --libs` is counted as two separate arguments.
Changing it to "`sdl-config --libs`" doesn't help.

I've worked that around like this:

---
EXEC_PROGRAM(${SDL_CONFIG} ARGS "--cflags" OUTPUT_VARIABLE SDL_CFLAGS)
EXEC_PROGRAM(${SDL_CONFIG} ARGS "--libs" OUTPUT_VARIABLE SDL_LIBS)

ADD_DEFINITIONS(${SDL_CFLAGS})
ADD_EXECUTABLE(Memonix ${memonix_SRCS})
TARGET_LINK_LIBRARIES(Memonix ${SDL_LIBS} ${SDLIMAGE_LIBRARY} ${SDLMIXER_LIBRARY} ${OPENGL_gl_LIBRARY} ${GLU_LIBRARY})
---

Seems cleaner but that's more lines as well.

Second breakage is like this:

---
Linking CXX executable Memonix
/usr/local/bin/cmake -E cmake_link_script CMakeFiles/Memonix.dir/link.txt --verbose=1
/usr/bin/c++   -O2 -fno-strict-aliasing -pipe -march=nocona  -fPIC  -pthread CMakeFiles/Memonix.dir/src/Main.o CMakeFiles/Memonix.dir/src/protect.o CMakeFiles/Memonix.dir/src/dialogs.o CMakeFiles/Memonix.dir/src/loading.o CMakeFiles/Memonix.dir/src/loop_audio.o CMakeFiles/Memonix.dir/src/Core/Texture/Texture.o CMakeFiles/Memonix.dir/src/Core/Texture/TextureManager.o CMakeFiles/Memonix.dir/src/Core/Texture/Texture_DIB.o CMakeFiles/Memonix.dir/src/Core/Math/Matrix33.o CMakeFiles/Memonix.dir/src/Core/Math/Matrix44.o CMakeFiles/Memonix.dir/src/Core/Math/Math.o CMakeFiles/Memonix.dir/src/Core/RendererInterface/OGL_Texture.o CMakeFiles/Memonix.dir/src/Core/RendererInterface/OGL_Draw3D.o CMakeFiles/Memonix.dir/src/Core/RendererInterface/RI_Font.o CMakeFiles/Memonix.dir/src/Core/RendererInterface/OGL_Draw2D.o CMakeFiles/Memonix.dir/src/Core/RendererInterface/OGL_Main.o CMakeFiles/Memonix.dir/src/Core/RendererInterface/OGL_Light.o CMakeFiles/Memonix.dir/src/Core/RendererInterface/OGL_Matrix.o CMakeFiles/Memonix.dir/src/Core/RendererInterface/RI_Int.o CMakeFiles/Memonix.dir/src/Core/System/Timer.o CMakeFiles/Memonix.dir/src/Core/System/Mouse.o CMakeFiles/Memonix.dir/src/Core/System/System.o CMakeFiles/Memonix.dir/src/Core/System/Keyboard.o CMakeFiles/Memonix.dir/src/Core/VirtualFileSystem/Haff.o CMakeFiles/Memonix.dir/src/Core/VirtualFileSystem/VFS.o CMakeFiles/Memonix.dir/src/Core/VirtualFileSystem/RLE.o CMakeFiles/Memonix.dir/src/game_start.o CMakeFiles/Memonix.dir/src/loop_proc.o CMakeFiles/Memonix.dir/src/menu.o CMakeFiles/Memonix.dir/src/game.o CMakeFiles/Memonix.dir/src/options.o CMakeFiles/Memonix.dir/CMakeFiles/CompilerIdCXX/CMakeCXXCompilerId.o  -o Memonix  -L/usr/local/lib -Wl,-rpath,/usr/local/lib -lSDL -pthread /usr/local/lib/libSDL_image.so /usr/local/lib/libSDL_mixer.so /usr/local/lib/libGL.so /usr/local/lib/libGLU.so /usr/local/lib/libGL.so /usr/local/lib/libGLU.so /usr/local/lib/libSM.so /usr/local/lib/libICE.so /usr/local/lib/libX11.so /usr/local/lib/libXext.so -Wl,-rpath,/usr/local/lib 
CMakeFiles/Memonix.dir/CMakeFiles/CompilerIdCXX/CMakeCXXCompilerId.o(.text+0x0): In function `main':
: multiple definition of `main'
CMakeFiles/Memonix.dir/src/Main.o(.text+0x44): first defined here
/usr/bin/ld: Warning: size of symbol `main' changed from 2288 in CMakeFiles/Memonix.dir/src/Main.o to 3 in CMakeFiles/Memonix.dir/CMakeFiles/CompilerIdCXX/CMakeCXXCompilerId.o
*** Error code 1
---

As you can see,
CMakeFiles/Memonix.dir/CMakeFiles/CompilerIdCXX/CMakeCXXCompilerId.o
gets into project object files (seems like it's because
CMakeFiles/CompilerIdCXX/CMakeCXXCompilerId.cpp gets into GLOB_RECURSE.
That's obviously undesired.

-- 
Dmitry A. Marakasov    | jabber: amdmi3 at jabber.ru
amdmi3 at amdmi3.ru       | http://www.amdmi3.ru


More information about the CMake mailing list