On Wednesday 21 November 2007, Jesse Corrington wrote: > I have a project that has many different os targets that use different sets > of source files and it builds a single exe. The source tree is like this > commonSource/morespecific/morespecific. I figured I would have the common > CMakeLists create a list of common files and call subdirs on the correct > specific dirs for the other source. These specific dirs would then add to > the source list the parent created. However the source list variable > doesn't seem to keep it's value between multiple files. What is the best > way to handle this. Thanks
The values are not kept because of the way how variables "inherit" their values in cmake. In subdirs they start with the value from the parent dir, but modifications don't get distributed back to the parent dir. That's why you can add as many source files to a variable in a subdir, they will not "arrive" in the parent dir. You could either include() the files in the subdirs or you could build static libraries in the subdirs and link the application to these static libs. If you chose to use include(), beware that if you have e.g. set(SRCS special.c) in basic/specific/morespecific/CMakeLists.txt and include that file in basic/CMakeLists.txt, special.c is then expected to be in basic/special.c. So you have then to use the relative path to the file: set(SRCS specific/morespecific/special.c). You can automate that a bit by using something like the following get_filenamecomponent(dir "${CMAKE_CURRENT_LIST_FILE}" PATH) set(SRCS ${dir}/special.c) Additionally, if you use this style with include()ing the other files, I would recommend to name the included files not CMakeLists.txt but something else, e.g. TargetSources.txt or something. Hope that helps Alex _______________________________________________ CMake mailing list CMake@cmake.org http://www.cmake.org/mailman/listinfo/cmake