I seriously doubt that you need the level of complexity in CMake as is required in a general-purpose programming language as C++. Perhaps Bill (or one of the other CMake developers) can shed some more light on this, but I think the current approach was chosen for simplicity. This way one does not have to keep track of scoping and introduce some kind of macro/function stack.
On 4. Mar, 2009, at 17:20, Robert Dailey wrote:

In C++, you can have two functions with the same name in two different
translation units and they can both do different things so long as they are
static.

Exactly. But then, CMake never tried to be as complete as C++, nor should it. It has one specific goal to which the language has been tailored. It kind of follows the "good enough" paradigm.

You can also have two functions with the same name in two different
namespaces and the implementations can also vary.

But then the namespace name becomes "part of" the function name, separating the two clearly.

I fail to see the issue.
Defining macros or functions in a deeper directory serves a useful purpose because it provides a way of hiding macros that may be specific to only that
directory from other directories.

Why on earth do you really need that? After all, it's your code. You don't have to distribute your build system as a library where you have to hide the inner workings from users. If you intend that macro to be used only in one place, then DON'T call it somewhere else. Further, if you define a macro in foo/bar, I hardly think that any of your co- workers will try to use it in foo/baz. Especially if you properly document your code...

I have functions available in other
directories which should not be accessible.

Again, why??? Simply don't do it.



Is this a bug or a feature?

Neither. It is "good enough". If you don't agree, submit a patch introducing scoped macro/function names. But I suspect it would break a lot of existing code...


Michael



On Wed, Mar 4, 2009 at 1:43 AM, Michael Wild <[email protected]> wrote:


On 4. Mar, 2009, at 7:11, Robert Dailey wrote:

On Wed, Mar 4, 2009 at 12:02 AM, Michael Wild <[email protected]> wrote:

If you add a subdirectory, it inherits all variables and macros from the
parent directories. This is actually what one expects, otherwise you
would
have to repeat the whole system detection (find_pacakge, find_library, find_path etc.) in every subdirectory. The reverse, however is not true.
By
default, variables (I'm not sure about macros) don't propagate into the
parent scope, unless one uses the PARENT_SCOPE option or adds the
variable
to the cache which makes it global.



That makes perfect sense and works as I would expect. However, I'm seeing the behavior you state should not happen. That is, the macros defined in
the
child directory are somehow propagating up to the parent.


Sorry, must have missed the bar/baz difference... Well, I figure it also makes some sense that macros and functions are global. Otherwise one would have very confusing things going on, like a macro by the same name doing
completely unrelated things in different directories.

Michael


_______________________________________________
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

Reply via email to