On 11/17/2010 04:56 PM, Thomas Lehmann wrote: >>> for an automatically forced include I have provided an >>> >>> option like this: >>> >>> >>> >>> set(WIN32_SPEC >> ${CMAKE_CURRENT_SOURCE_DIR}/../../libs/global/win32_spec.h) >> >> May you could use an absolute reference using >> >> ${PROJECT_SOURCE_DIR}/libs/global/win32_spec.h >> >> if your project is name TOTO >> (from the PROJECT(TOTO CXX) statement) >> you use >> >> ${TOTO_SOURCE_DIR}/libs/global/win32_spec.h. > > it depends on how I use cmake. I can use the root of all > sources or I use a subtree. > Let's say I have following setup. > > /src/libs > /src/cmake > /src/apps > > when I call "cmake /src" or "cmake /src/apps" is relating the > application to be build no difference but the variable CMAKE_SOURCE_DIR > will change. My central files are in /src/cmake. > > I would like avoiding to redefine search paths and variables in each > individual > makefile depending on its location in the source tree. One example: > > <code> > # ensuring that packages are found > set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} > ${CMAKE_CURRENT_SOURCE_DIR}/../../scripts/make) > > # most common definitions, macros, ... required by most projects > find_package(AllOptions) > </code> > > I think that the problem is that cmake does not know where the real root > is. I have not found something except adjusting an environment variable > but this is something I would like to avoid when possible...
If you don't want to make /src the definite top-level directory of your project(s) you must indeed provide a hint to /src/cmake since otherwise, CMake cannot have an idea that there's additional stuff in this sibling, e.g. "cmake -DCMAKE_CENTRAL_DIR=/src/cmake /src/apps". Alternatively, you might always configure /src and use options to decide which projects, i.e. subdirectories, are actually built, e.g.: /src/CMakeLists.txt: OPTION(BUILD_LIBS "Build libs" ON) OPTION(BUILD_APPS "Build apps" ON) IF(BUILD_LIBS) ADD_SUBDIRECTORY(libs) ENDIF() IF(BUILD_APPS) ADD_SUBDIRECTORY(apps) ENDIF() So, you can say "cmake /src" to build libraries and applications, or "cmake -DBUILD_APPS=OFF /src" to build libraries only etc., and in any case, you may refer safely to ${CMAKE_SOURCE_DIR}/cmake from each of your projects' CMakeLists.txt. Regards, Michael >>> add_definitions(-FI ${WIN32_SPEC}) >>> >>> >>> But when including this central file (find_package) the variable >> CMAKE_CURRENT_SOURCE_DIR >>> changes and then the path and filename of the header is wrong. >>> >>> >>> >>> How to proceed best? >>> Can I avoid that for those "set" statement the variable is not >> overwritten by those >>> files including this central makefile? >> >> You may use a CACHED variable >> set(WIN32_SPEC ${PROJECT_SOURCE_DIR}/libs/global/win32_spec.h CACHE >> FILEPATH "Central Include") >> >> the first calling this will set the value then other set will be >> ignored. >> If you want to override a CACHE var value you'll have to use FORCE set >> option. >> >> >> >> -- >> Erk >> Membre de l'April - « promouvoir et défendre le logiciel libre » - >> http://www.april.org > > Thomas Lehmann > Scrum Master > > RTS Realtime Systems Software GmbH, Rembrandtstrasse 13, D-60596 Frankfurt am > Main > T: +49.69.61009.0 / F: +49.69.61009.181 > > Sitz: Frankfurt am Main - HRB 84467 Amtsgericht Frankfurt am Main > Geschäftsführer: Steffen Gemuenden, Igor Sluga > > www.rtsgroup.net > > This email and any attachments are for the exclusive and confidential use of > the intended recipient. If you are not the intended recipient, or an employee > or agent responsible for delivering this message to the intended recipient, > please do not read, distribute or take action in reliance upon this message. > If you have received this in error, please notify me immediately by return > email and promptly delete this message and its attachments from your computer > system. _______________________________________________ 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