On 09.07.07 23:22:23, Alexander Neundorf wrote: > On Monday 09 July 2007 14:22, Andreas Pakulat wrote: > > python/parser/CMakeLists.txt with > > > > add_executable(python-parser ${foo_SRCS} ) > > > > > > Then cmake will complain that it doesn't know how to create the files in > > foo_SRCS for the python-parser target. > > > > And always setting the foo_SRCS GENERATED in the subdirs is not really > > usable either as they are only generated when you've got the generator > > tool installed (which is not required). So I'd again need to have > > if(FOO_FOUND) stuff everywhere. > > Can you put the rules for generating the files in the directories where the > file are used, e.g. with some macros ?
I think the macro I came up with causes a full rebuild of the project using it when touching any of the CMakeLists.txt. An example is playground/devtools/kdevelop4-extra-plugins/ruby if I touch tests/CMakeLists.txt the whole project is rebuilt, the generated and non-generated files are all recompiled. The macro I use looks like this: macro(GET_GENERATED_SRCS _srcsList) if(KDEVPG_FOUND AND FLEX_FOUND) include_directories(${KDEVPG_INCLUDE_DIR}) kdevpg_generate(_kdevpgList ruby DEBUG_VISITOR "${CMAKE_SOURCE_DIR}/parser/ruby.g" "${CMAKE_SOURCE_DIR}/parser/ruby_lexer.h") # Copy ruby_lexer.ll to the builddir, so that flex doesn't write out # absolute paths in the generated file when we pass them as arguments. # In short, I don't want stuff like # '#line 2 "/home/kde/build/.../ruby_lexer.cpp" in SVN. add_custom_command( OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/ruby_lexer.ll" MAIN_DEPENDENCY "${CMAKE_SOURCE_DIR}/parser/ruby_lexer.ll" COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different "${CMAKE_SOURCE_DIR}/parser/ruby_lexer.ll" "${CMAKE_CURRENT_BINARY_DIR}/ruby_lexer.ll" ) # Add command to generate the lexer. add_custom_command( OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/ruby_lexer.cpp" MAIN_DEPENDENCY "${CMAKE_CURRENT_BINARY_DIR}/ruby_lexer.ll" DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/ruby_parser.h" "${CMAKE_SOURCE_DIR}/parser/ruby_lexer.h" COMMAND ${FLEX_EXECUTABLE} ARGS -o"ruby_lexer.cpp" "ruby_lexer.ll" WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} ) set(${_srcsList} ${_kdevpgList} "${CMAKE_CURRENT_BINARY_DIR}/ruby_lexer.cpp") else(KDEVPG_FOUND AND FLEX_FOUND) include_directories(${CMAKE_SOURCE_DIR}/parser/generated) message(STATUS "Assuming existence of generated parser files") message( STATUS "Assuming existence of generated lexer files") set(${_srcsList} ${CMAKE_SOURCE_DIR}/parser/generated/ruby_parser.cpp ${CMAKE_SOURCE_DIR}/parser/generated/ruby_visitor.cpp ${CMAKE_SOURCE_DIR}/parser/generated/ruby_default_visitor.cpp ${CMAKE_SOURCE_DIR}/parser/generated/ruby_lexer.cpp ) endif(KDEVPG_FOUND AND FLEX_FOUND) endmacro(GET_GENERATED_SRCS) Andreas -- Make a wish, it might come true. _______________________________________________ Kde-buildsystem mailing list Kde-buildsystem@kde.org https://mail.kde.org/mailman/listinfo/kde-buildsystem