[CMake] Make project name a target
Marcel Loose
loose at astron.nl
Fri Sep 11 19:07:32 EDT 2009
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 <loose at astron.nl> 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 <loose at astron.nl> 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
> >
More information about the CMake
mailing list