I have worked on projects where we do something fairly similar. The significant difference is that we create only a single executable per directory. All told is it a fairly simple and looks something like:
# Builds a source file and an executable that does nothing other than # compile the given header files. function(add_header_test name) set(hfiles ${ARGN}) set(suffix ".cpp") set(cxxfiles) foreach (header ${ARGN}) string(REPLACE "${CMAKE_CURRENT_BINARY_DIR}" "" header "${header}") get_filename_component(headername ${header} NAME_WE) set(src ${CMAKE_CURRENT_BINARY_DIR}/TestBuild_${name}_${headername}${suffix}) configure_file(${SMTK_SOURCE_DIR}/CMake/TestBuild.cxx.in ${src} @ONLY) set(cxxfiles ${cxxfiles} ${src}) endforeach (header) add_library(TestBuild_${name} ${cxxfiles} ${hfiles}) target_include_directories(TestBuild_${name} ${CMAKE_CURRENT_BINARY_DIR}) set_source_files_properties(${hfiles} PROPERTIES HEADER_FILE_ONLY TRUE) endfunction(add_header_test) On Sat, Mar 14, 2015 at 8:19 AM, Christoph Grüninger <f...@grueninger.de> wrote: > Dear CMakers, > I want to have all my C++ headers self-sufficient (self-contained), > i.e., a header can be included without additional includes. This is not > only handy but also part of Google's C++ styleguide [2]. > > It would be great to have a make target (let's call it headercheck), > that can check for this, by compiling a simple test.cc file for each > current_header.h: > #include <config.h> > #include "current_header.h" > #include "current_header.h" > > Additionally it would be great to have such a target for every folder > (checking all headers recursively) and every header that is explicitly > passed as an argument. > > We tried this with CMake: We generate a test.cc file per header and > create a library for every cc file. The problem is, that we get hundreds > of additional targets, we generate a lot of folders and files which can > increase our build directory size by an order of magnitude and it does > not work properly on a per file or per directory basis. > > What do you think, is there a good way to have such a target headercheck > with CMake? Or would it be better to include it as a CTest? Or better as > an external (bash) script as proposed in [1]? > > If it can be done in a good way with CMake, would it be of interest to > include it as a feature in CMake? Or as an external project similar to > UseLATEX.cmake? > > Bye > Christoph > > [1] > > http://stackoverflow.com/questions/1892043/self-sufficient-header-files-in-c-c > [2] > > http://google-styleguide.googlecode.com/svn/trunk/cppguide.html#Self_contained_Headers > > -- > When you die, that does not mean that you lose to cancer, > you beat cancer by how you live, why you live, and in the > manner in which you live. -- Stuart Scott, 1965-2015 > -- > > Powered by www.kitware.com > > Please keep messages on-topic and check the CMake FAQ at: > http://www.cmake.org/Wiki/CMake_FAQ > > Kitware offers various services to support the CMake community. For more > information on each offering, please visit: > > CMake Support: http://cmake.org/cmake/help/support.html > CMake Consulting: http://cmake.org/cmake/help/consulting.html > CMake Training Courses: http://cmake.org/cmake/help/training.html > > Visit other Kitware open-source projects at > http://www.kitware.com/opensource/opensource.html > > Follow this link to subscribe/unsubscribe: > http://public.kitware.com/mailman/listinfo/cmake >
-- Powered by www.kitware.com Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ Kitware offers various services to support the CMake community. For more information on each offering, please visit: CMake Support: http://cmake.org/cmake/help/support.html CMake Consulting: http://cmake.org/cmake/help/consulting.html CMake Training Courses: http://cmake.org/cmake/help/training.html Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html Follow this link to subscribe/unsubscribe: http://public.kitware.com/mailman/listinfo/cmake