[CMake] List of components being build.

Schwartz, Philip Philip.Schwartz at lexisnexis.com
Tue Feb 2 16:30:41 EST 2010


My current project has many components that need to be built. Some portions of our code depend on others and using add_subdirectory, I am having an issue where I get multiple of my targets loaded causing a faliure.

I placed the add_subdirectory in a macro that uses a simple hash style of access

set ( BUILD_MAP_${_name} 1 ) where ${_name} is the target name.

I have an if statement in the macro that tests if BUILD_MAP_${_name} is defined. The issue is say I have a custom mysqlclient that is used by 3 of my projects that are all built as part of "all".

Project A: Depends on Mysqlclient
Project B: Depends on Mysqlclient
Project C: Depends on Mysqlclient

Dir structure
all/
   /lib/Mysqlclient
   /bin/Project A
   /bin/Project B
   /bin/Project C

each of these folders have a CMakeLists.txt. The all/CMakeLists.txt has the following

project(all)
add_subdirectory(lib/Mysqlclient)
add_subdirectory(bin/Project A)
add_subdirectory(bin/Project B)
add_subdirectory(bin/Project C)

When building from the top level and having a definition of "-lmysqlclient" everything works as expected. The issue comes up when I do not want to build all of the source.

Say I would like to build only Project B.

from my build directory, I would run cmake ~/all/Project B.

The cmake process ends without issue, but the make fails on link due to the missing Mysqlclient library not being built. I want to be able to declare dependencies for each project that way I can build each seperately from the top level. So far using a macro to do the add_subdirectory fails because even though I check to see if BUILD_MAP_${_name} is defined, the add_subdirectory command is still run as if the BUILD_MAP_${_name} is not defined (if defined, only an add_dependencies should be run)

Any help would be greatly appreciated.

________________________________
This message (including any attachments) contains confidential information intended for a specific individual and purpose, and is protected by law. If you are not the intended recipient, you should delete this message. Any disclosure, copying, or distribution of this message, or the taking of any action based on it, is strictly prohibited.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.cmake.org/pipermail/cmake/attachments/20100202/5a5e8ec3/attachment-0001.htm>


More information about the CMake mailing list