Re: [CMake] Make project name a target
When you say "make the project name a target" what do you mean by that? (1) internally create a CMake target with the given name? (2) create a makefile target with that name that builds all the cmake targets in that cmake project? (3) something else? (1) is probably not feasible for most folks -- because many people use the same name for their PROJECT statement and the main library or executable for that project which is already a cmake target (and a makefile target) with that name. On Fri, Sep 11, 2009 at 3:51 AM, Marcel Loose wrote: > Hi all, > > I was wondering whether it's a good idea to make the project name (i.e. > the argument to the 'project' command) a target. > > Rationale: I have a project that consists of numerous sub-projects and I > would like to be able to build some of these separately. Wrapping the > 'project' command in a macro is not a solution, because AFAIK CMake > *must* see a 'project' command in the top-level CMakeLists.txt file; a > 'myproject' macro, wrapping the 'project' command, will not do. > > Any comments? > > Best regards, > Marcel Loose. > > > ___ > 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 > ___ 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
Re: [CMake] Make project name a target
Hi David, I don't see the exact difference between (1) and (2). And yes, I was thinking of using the project name as a target. You are right, that it might cause clashes with existing projects, though :-( We use the convention that project names are always capitalized, so we usually don't run into problems. Is there a nifty trick to wrap the 'project' command? I never succeeded in doing that. Best regards, Marcel Loose. On Fri, 2009-09-11 at 07:09 -0400, David Cole wrote: > When you say "make the project name a target" what do you mean by > that? > > > (1) internally create a CMake target with the given name? > (2) create a makefile target with that name that builds all the cmake > targets in that cmake project? > (3) something else? > > > (1) is probably not feasible for most folks -- because many people use > the same name for their PROJECT statement and the main library or > executable for that project which is already a cmake target (and a > makefile target) with that name. > > > > On Fri, Sep 11, 2009 at 3:51 AM, Marcel Loose wrote: > Hi all, > > I was wondering whether it's a good idea to make the project > name (i.e. > the argument to the 'project' command) a target. > > Rationale: I have a project that consists of numerous > sub-projects and I > would like to be able to build some of these separately. > Wrapping the > 'project' command in a macro is not a solution, because AFAIK > CMake > *must* see a 'project' command in the top-level CMakeLists.txt > file; a > 'myproject' macro, wrapping the 'project' command, will not > do. > > Any comments? > > Best regards, > Marcel Loose. > > > ___ > 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 > > ___ 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
Re: [CMake] Make project name a target
On Fri, Sep 11, 2009 at 4:22 PM, Marcel Loose wrote: > Hi David, > > I don't see the exact difference between (1) and (2). And yes, I was > thinking of using the project name as a target. You are right, that it > might cause clashes with existing projects, though :-( > > We use the convention that project names are always capitalized, so we > usually don't run into problems. > > Is there a nifty trick to wrap the 'project' command? I never succeeded > in doing that. I did this once inside a macro, and that should work as expected. The code of the macro should behave just as if it was copy-pasted to the place where you call the macro, so scope and such will be that of the place where you call it. Greetings, JeDi > > Best regards, > Marcel Loose. > > > On Fri, 2009-09-11 at 07:09 -0400, David Cole wrote: >> When you say "make the project name a target" what do you mean by >> that? >> >> >> (1) internally create a CMake target with the given name? >> (2) create a makefile target with that name that builds all the cmake >> targets in that cmake project? >> (3) something else? >> >> >> (1) is probably not feasible for most folks -- because many people use >> the same name for their PROJECT statement and the main library or >> executable for that project which is already a cmake target (and a >> makefile target) with that name. >> >> >> >> On Fri, Sep 11, 2009 at 3:51 AM, Marcel Loose wrote: >> Hi all, >> >> I was wondering whether it's a good idea to make the project >> name (i.e. >> the argument to the 'project' command) a target. >> >> Rationale: I have a project that consists of numerous >> sub-projects and I >> would like to be able to build some of these separately. >> Wrapping the >> 'project' command in a macro is not a solution, because AFAIK >> CMake >> *must* see a 'project' command in the top-level CMakeLists.txt >> file; a >> 'myproject' macro, wrapping the 'project' command, will not >> do. >> >> Any comments? >> >> Best regards, >> Marcel Loose. >> >> >> ___ >> 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 >> >> > > ___ > 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 > ___ 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
Re: [CMake] Make project name a target
On Friday 11 September 2009, David Cole wrote: > When you say "make the project name a target" what do you mean by that? > (1) internally create a CMake target with the given name? > (2) create a makefile target with that name that builds all the cmake > targets in that cmake project? I think this should be more or less the same as invoking make without specific target in _BINARY_DIR. Alex ___ 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
Re: [CMake] Make project name a target
Hi JeDi, If you look carefully, you will notice that, when you create a project through a macro (e.g. myproject), CMake will create a dummy project named "Project" and assume you're using C and C++ as default languages. Note that I intentionally chose a non-supported language, CPP, in the example below. Look at the line printing PROJECT_NAME. But you'll notice a significant difference in output anyway. Best regards, Marcel Loose. CMakeLists.txt with direct call of project() command: $ pwd /home/loose/work/cmake/build $ cat ../proj/CMakeLists.txt cmake_minimum_required(VERSION 2.6) message(STATUS "PROJECT_NAME = ${PROJECT_NAME}") project(main CPP) $ cmake -DCMAKE_MODULE_PATH:PATH=$HOME/work/cmake/proj ../proj -- PROJECT_NAME = CMake Error: Error required internal CMake variable not set, cmake may be not be built correctly. Missing variable is: CMAKE_CPP_COMPILER_ENV_VAR CMake Error: Error required internal CMake variable not set, cmake may be not be built correctly. Missing variable is: CMAKE_CPP_COMPILER CMake Error: Could not find cmake module file:/home/loose/work/cmake/build/CMakeFiles/CMakeCPPCompiler.cmake CMake Error: Could not find cmake module file:CMakeCPPInformation.cmake CMake Error: CMAKE_CPP_COMPILER not set, after EnableLanguage -- Configuring incomplete, errors occurred! CMakeLists.txt with call of project() through myproject macro: - $ cat CMakeLists.txt cmake_minimum_required(VERSION 2.6) message(STATUS "PROJECT_NAME = ${PROJECT_NAME}") include(myproject) myproject(main CPP) $ cmake -DCMAKE_MODULE_PATH:PATH=$HOME/work/cmake/proj ../proj -- The C compiler identification is GNU -- The CXX compiler identification is GNU -- Check for working C compiler: /usr/bin/gcc -- Check for working C compiler: /usr/bin/gcc -- works -- Detecting C compiler ABI info -- Detecting C compiler ABI info - done -- Check for working CXX compiler: /usr/bin/c++ -- Check for working CXX compiler: /usr/bin/c++ -- works -- Detecting CXX compiler ABI info -- Detecting CXX compiler ABI info - done -- PROJECT_NAME = Project CMake Error: Error required internal CMake variable not set, cmake may be not be built correctly. Missing variable is: CMAKE_CPP_COMPILER_ENV_VAR CMake Error: Error required internal CMake variable not set, cmake may be not be built correctly. Missing variable is: CMAKE_CPP_COMPILER CMake Error: Could not find cmake module file:/home/loose/work/cmake/build/CMakeFiles/CMakeCPPCompiler.cmake CMake Error: Could not find cmake module file:CMakeCPPInformation.cmake CMake Error: CMAKE_CPP_COMPILER not set, after EnableLanguage -- Configuring incomplete, errors occurred! On Fri, 2009-09-11 at 16:34 +0200, Jeroen Dierckx wrote: > On Fri, Sep 11, 2009 at 4:22 PM, Marcel Loose wrote: > > Hi David, > > > > I don't see the exact difference between (1) and (2). And yes, I was > > thinking of using the project name as a target. You are right, that it > > might cause clashes with existing projects, though :-( > > > > We use the convention that project names are always capitalized, so we > > usually don't run into problems. > > > > Is there a nifty trick to wrap the 'project' command? I never succeeded > > in doing that. > > I did this once inside a macro, and that should work as expected. The > code of the macro should behave just as if it was copy-pasted to the > place where you call the macro, so scope and such will be that of the > place where you call it. > > Greetings, > JeDi > > > > > > Best regards, > > Marcel Loose. > > > > > > On Fri, 2009-09-11 at 07:09 -0400, David Cole wrote: > >> When you say "make the project name a target" what do you mean by > >> that? > >> > >> > >> (1) internally create a CMake target with the given name? > >> (2) create a makefile target with that name that builds all the cmake > >> targets in that cmake project? > >> (3) something else? > >> > >> > >> (1) is probably not feasible for most folks -- because many people use > >> the same name for their PROJECT statement and the main library or > >> executable for that project which is already a cmake target (and a > >> makefile target) with that name. > >> > >> > >> > >> On Fri, Sep 11, 2009 at 3:51 AM, Marcel Loose wrote: > >> Hi all, > >> > >> I was wondering whether it's a good idea to make the project > >> name (i.e. > >> the argument to the 'project' command) a target. > >> > >> Rationale: I have a project that consists of numerous > >> sub-projects and I > >> would like to be able to build some of these separately. > >> Wrapping the > >> 'project' command in a macro is not a solution, because AFAIK > >> CMake > >> *must* see a 'project' command in the top-level CMakeLists.txt > >> file; a > >> 'myproject' macro, wrapping the 'project' command, will not > >> do. > >> > >> Any co