On Wed, Jun 27, 2012 at 2:59 AM, Rolf Eike Beer <e...@sf-mail.de> wrote: >> Sigh, now I sent you the code from the wrong directory, but the code for >> the "Backend" component is virtually identical. I don't know how to use >> functions with CMake, so I simply made a verbatim copy of the below code >> in >> each subfolder and edited it to match the subfolder. So the Backend >> project looks like this: >> >> project(Backend) >> >> set(PublicHeaders >> "Backend.hpp" >> "Context.hpp" >> ) >> set(PublishedHeaders "") >> foreach(Header IN LISTS PublicHeaders) >> get_filename_component(HeaderFilename "${Header}" NAME) >> set(Source "${CMAKE_CURRENT_SOURCE_DIR}/${Header}") >> set(Output "${CMAKE_CURRENT_BINARY_DIR}/${HeaderFilename}") >> list(APPEND PublishedHeaders "${Output}") >> add_custom_command( >> OUTPUT "${Output}" >> COMMAND "${CMAKE_COMMAND}" -E copy_if_different "${Source}" >> "${Output}" >> MAIN_DEPENDENCY "${Source}" >> COMMENT "Publishing ${HeaderFilename}" >> VERBATIM >> ) > > Why don't you simply use configure_file(... COPYONLY) here? >
I prefer add_custom_command build-time copying over configure_file configure-time copying almost always. I don't want to add to the (serial, non-parallelizable) CMake configure time unnecessarily when I could be doing a "make -j 8" or a ninja full-parallel build to achieve the same copy tasks 8x (or more!) faster... As a general rule of thumb, always defer things that take any significant time to build-time when possible. Just my opinion, but the custom command route is well proven when dependencies are specified correctly in the CMakeLists files. 2 cents, :-) David >> endforeach() >> add_custom_target( >> publish_backend_headers >> ALL >> DEPENDS ${PublishedHeaders} >> SOURCES ${PublicHeaders} >> ) >> include_directories("${CMAKE_BINARY_DIR}/../") > > This is almost certainly wrong. Guess my build dir is /tmp/foo, why on > earth do you want to include /tmp? I could understand if it would be > ${CMAKE_CURRENT_BINARY_DIR}/.. if you are in a subdirectory, but otherwise > this is likely completely bogus. > >> include_directories("$ENV{LLVM}/include") >> >> add_definitions(-D__STDC_CONSTANT_MACROS) >> add_definitions(-D__STDC_LIMIT_MACROS) >> >> add_library(Backend >> "Backend.cpp" >> ) >> >> add_dependencies(Backend publish_backend_headers) > > I think you can avoid the whole add_custom_target/add_library by just writing > > add_library(Backend Backend.cpp ${PublishedHeaders}) > > (Untested. May only reliably work if you use configure_file. ymmv). > > Eike > -- > > 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 -- 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