[CMake] Help getting my simple OpenGL project to use cmake

Craig Pemberton craigpemberton at gmail.com
Thu Jul 8 04:05:55 EDT 2010


Hello everyone,

I am working on converting my project from using a handwritten
Makefile to using cmake.

I have been playing with cmake but I keep running into problems and
I'm probably writing really ugly CMakeLists.txt files.

My project is laid out like this:

graphics/
	data/
		bark.rgb
		ground.rgb
		leaf.rgb
	library/
		Affine.cpp
		Affine.h
		Camera.cpp
		Camera.h
		Canvas.cpp
		Canvas.h
		Color.cpp
		Color.h
		Light.cpp
		Light.h
		Material.cpp
		Material.h
		Matrix.cpp
		Matrix.h
		Quaternion.cpp
		Quaternion.h
		Ray.cpp
		Ray.h
		Texture.cpp
		Texture.h
		utility.cpp
		Vertex.cpp
		Vertex.h
	programs/
		exam.cpp
		forces.cpp
		ifs.cpp
		lsystem.cpp
		raytrace.cpp
		subdivide.cpp
		testray.cpp
My "library" is all the classes that I use while the programs are each
files with a main function in them.

My code relies on Glut and OpenGl.

I would like cmake to build an executable for each of the files in
programs and preferably build out of source so things stay relatively
clean.

Here is what my CMakeLists.txt files currently look like and I have no
idea if I'm remotely doing the right thing.

In the root directory /

cmake_minimum_required (VERSION 2.6)
project(Pemberton)
find_package(GLUT)
find_package(OpenGL)
add_definitions(-Wall -Wextra -pedantic -Werror -O3)
SUBDIRS(library programs)
INCLUDE_DIRECTORIES(library)
set(LIBRARY_OUTPUT_PATH "${CMAKE_BINARY_DIR}/library")
set(EXECUTABLE_OUTPUT_PATH "${CMAKE_BINARY_DIR}/bin")
mark_as_advanced(LIBRARY_OUTPUT_PATH EXECUTABLE_OUTPUT_PATH)

In library/

FILE(GLOB SOURCE_FILES *.cpp)
FILE(GLOB INCLUDE_FILES *.h)
SOURCE_GROUP("Source Files" FILES ${SOURCE_FILES})
SOURCE_GROUP("Header Files" FILES ${HEADER_FILES})
ADD_LIBRARY (Graphics STATIC ${SOURCE_FILES} ${INCLUDE_FILES})

In programs/

include_directories(../library)
#FILE(GLOB SOURCE_FILES .*.cpp)
#FILE(GLOB INCLUDE_FILES *.h)
#SOURCE_GROUP("Source Files" FILES ${SOURCE_FILES})
#SOURCE_GROUP("Header Files" FILES ${HEADER_FILES})
find_package(GLUT)
find_package(OpenGL)
add_executable(lsystem lsystem.cpp ${GLUT_LIBRARY} ${OPENGL_LIBRARY})
#set(PROGRAMS ifs lsystem raytrace subdivide)
#set(CORELIBS ${GLUT_LIBRARY} ${OPENGL_LIBRARY} GL GLU)
#foreach(programs ${PROGRAMS})
#	add_executable(${program} ${SOURCE_FILES} ${INCLUDE_FILES})
	#target_link_libraries(${program} ${CORELIBS})
#endforeach(program)

What is the correct way to set this up? Currently it's saying it can't
find OpenGL functions. I would like to have some really nice clean
cmake files.

Best regards,
Craig


More information about the CMake mailing list