On Saturday 25 Aug 2007 12:33:02 am kitts wrote: > On Friday 24 Aug 2007 11:43:12 pm kitts wrote: > > On Friday 24 Aug 2007 9:41:26 pm James Bigler wrote: > > > >> Code is organized as; > > > >> src/common > > > >> src/project1 > > > >> src/project2 > > > >> > > > >> The CMakeLists.tst files are located inside for each project which > > > >> sets the right compiler and sources to be built. Now i want common > > > >> to be included in each of these proejects and build separately for > > > >> each by inheriting all the settings for that project. > > > >> > > > >> What is the best way to achieve this? I cant use ADD_SUBDIRECTORY() > > > >> as it is really a sibling folder (cmake complains if I use > > > >> "../common"). > > > > > > > > Does anybody have a solution around this? The only way i could think > > > > of is to copy the common folder during configure time and run cmake > > > > again inside it by using the current cache. This is not a very > > > > efficient way as not all of the common folder code is necessary in > > > > every project. Also code changes in the common directory will not > > > > result in an update in the project. > > > > > > Have a look at LOAD_CACHE in the documentation. This will allow you to > > > load in cache variables from another cmake build. > > > > > > Also look at EXPORT_LIBRARY_DEPENDENCIES if you need to get out library > > > dependencies of your project. With that file you can simply IMPORT() > > > said file in your new project and life gets happy again. I've done > > > this with projects that build static libraries, and I need to tell an > > > external project the library dependencies. > > > > I am now trying something like this: > > > > if(NOT IS_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/common) > > file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/common) > > execute_process(COMMAND cmake ${CMAKE_SOURCE_DIR}/../common > > WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/common > > RESULT_VARIABLE _ERROR > > ) > > if(_ERROR) > > file(REMOVE_RECURSE ${CMAKE_CURRENT_BINARY_DIR}/common) > > message(FATAL_ERROR "Failed to configure shared code") > > endif(_ERROR) > > endif(NOT IS_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/common) > > > > I call make inside with common as the working directory with > > add_custom_command (PRE_BUILD). > > > > As with the the LOAD_CACHE, is there such an option that can be passed > > when calling the cmake executable? > > > > The other problem with the above approach is if there is a change in the > > project variables, the common code is not updated. I would want to merge > > common into the project in a way as though it were a subdirectory. Is > > this possible? > > Thanks to all who helped. This currently works for me; > > In the projects CMakeLists.txt: > > if(NOT IS_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/common) > file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/common) > endif(NOT IS_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/common) > > execute_process(COMMAND cmake -D > LOAD_CACHE_DIR:PATH=${CMAKE_CURRENT_BINARY_DIR} > ${CMAKE_SOURCE_DIR}/../common WORKING_DIRECTORY > ${CMAKE_CURRENT_BINARY_DIR}/common RESULT_VARIABLE _ERROR > ) > > if(_ERROR) > file(REMOVE_RECURSE ${CMAKE_CURRENT_BINARY_DIR}/common) > message(FATAL_ERROR "Failed to configure shared code") > endif(_ERROR) > > add_custom_target(common ALL make > WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/common > COMMENT "Building the common library" > ) > > add_executable(exec ${SRCS}) > add_dependencies(exec common) > > And in common/CMakeLists.txt > > message(STATUS "Loading cache from ${LOAD_CACHE_DIR}") > LOAD_CACHE(${LOAD_CACHE_DIR}) > project(common) > > However, i am all ears for a cleaner solution as this way common does not > receive the same arguments that the project receives. Things like; > > make clean > make rebuild_cache > make VERBOSE=1 > ... > > Is there a way by which i can pass the same command to build common as was > received by project?
All that mentioned above is not needed! I should have read the documentation with a lil more patience! add_subdirectory(${CMAKE_SOURCE_DIR}/../common common) does the job! -- Cheers! kitts _______________________________________________ CMake mailing list CMake@cmake.org http://www.cmake.org/mailman/listinfo/cmake