First of all - don't use file glob - see many past threads, FAQ entries, etc. This is a common beginner mistake, with unfortunate consequences.

Here is my quickie re-write of your build. You might need to double-check the variable names with their respective find modules - I did them from memory but with the knowledge that the OpenGL and GLUT ones are a little funky when compared to the modern de-facto standard.

Main directory:

cmake_minimum_required (VERSION 2.6)
project(Pemberton)
find_package(OpenGL REQUIRED)
find_package(GLUT REQUIRED)
if(CMAKE_COMPILER_IS_GNUCXX)
        set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -pedantic 
-Werror")
endif()

include_directories(library ${OPENGL_INCLUDE_DIRS} ${GLUT_INCLUDE_DIRS})
add_subdirectory(library)
add_subdirectory(programs)


Library directory:

set(LIB_SOURCES 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)
add_library(myGraphicsLib STATIC ${LIB_SOURCES})
target_link_libraries(myGraphicsLib ${OPENGL_LIBRARIES} ${GLUT_LIBRARY})

Programs directory:

set(APPS exam
                forces
                ifs
                lsystem
                raytrace
                subdivide
                testray)
foreach(app ${APPS})
        add_executable(${app} ${APPS}.cpp)
        target_link_libraries(${app} myGraphicsLib)
endforeach()


Basic principles:
    Mention anything only once.
    Shared code: make a static lib
Don't use outdated commands or style (subdirs, all caps commands, setting output directories without a compelling reason, using add_definitions to sneak compiler flags in) Minimize assumptions (-Wall -Werror only makes sense if you're using the gcc suite)

Didn't test it, but at the very least it should get you close.

Hope this helps!

Ryan

On 7/8/10 3:05 AM, Craig Pemberton wrote:
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
_______________________________________________
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


--
Ryan Pavlik
Human-Computer Interaction Graduate Student
Virtual Reality Applications Center
Iowa State University

rpav...@iastate.edu
http://academic.cleardefinition.com/

_______________________________________________
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