Hi Comments are inline...
On 8. Jul, 2010, at 10:05 , 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. > <snip/> > 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) If your project requires GLUT and OpenGL, you should add REQUIRED to the argument list. > add_definitions(-Wall -Wextra -pedantic -Werror -O3) > SUBDIRS(library programs) Use add_subirectory instead. subdirs is deprecated. > 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) Use CMAKE_ARCHIVE_OUTPUT_DIRECTORY, CMAKE_LIBRARY_OUTPUT_DIRECTORY and CMAKE_RUNTIME_OUTPUT_DIRECTORY instead. You don't have to mark them as advanced, since they are not cached. > > 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}) > Don't use FILE(GLOB ...). It is pure evil (it asks for all kinds of trouble!). List the sources explicitly instead: set(SOURCE_FILES Affine.cpp Camera.cpp Canvas.cpp Color.cpp Light.cpp Material.cpp Matrix.cpp Quaternion.cpp Ray.cpp Texture.cpp utility.cpp Vertex.cpp ) set(INCLUDE_FILES Affine.h Camera.h Canvas.h Color.h Light.h Material.h Matrix.h Quaternion.h Ray.h Texture.h Vertex.h ) > 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) No need to repeat that, right? > add_executable(lsystem lsystem.cpp ${GLUT_LIBRARY} ${OPENGL_LIBRARY}) Make this: add_executable(lsystem lsystem.cpp) target_link_libraries(${GLUT_LIBRARIES} ${OPENGL_LIBRARIES}) > #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 HTH Michael _______________________________________________ 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