[cmake-developers] [SOLVED]DESTDIR does not work correctly with install(FILES ... signature
Eric Noulard
eric.noulard at gmail.com
Tue Jan 8 07:08:39 EST 2013
2013/1/8 Alan W. Irwin <irwin at beluga.phys.uvic.ca>:
> On 2013-01-08 10:47+0100 Eric Noulard wrote:
>
>> 2013/1/8 Alan W. Irwin <irwin at beluga.phys.uvic.ca>:
>
>
>> The rule should be simple as:
>>
>> You need to escape one time less than the number of cmake run occuring
>> through the workflow path.
>> In your case you have to escape once because install(CODE ...) is
>> processed **by cmake**
>> at "Install time" and you expect the evaluation to take place at that
>> time.
>>
>> The may-be tricky part is "when" cmake (or derived cmake script engine
>> is running)
>> the "running time" of cmake tool suite may not be obvious and I tried
>> to picture it in
>> a tutorial (see excerpt attached to this mail)
>>
>> May be we can document common uses cases:
>>
>> install(CODE --> one escape
>> install(SCRIPT --> none
>>
>> add_custom_command/target --> one or two level escape depending on the
>> arguments
>>
>> with various combination where you may "configure_file"
>> 1) yourself before using "install(SCRIPT ..." --> my way of work
>> usually one escape level.
>>
>> 2) through CPack like values used in CPACK_xxx variable which end up
>> in some CPack template file which are processed first at CMake-time
>> and
>> may be again at CPack-time. This one may lead to 2 level escape.
>>
>
> Don't forget the example of code like this:
>
> set(CPACK_SOURCE_IGNORE_FILES
> "\\\\#*\\\\#$"
> "^${PROJECT_SOURCE_DIR}.*/\\\\.svn/"
> ....
>
> I have been wrong about overcomplicating escapes in the past, but I
> think it this case, 4 levels of escapes are really necessary for these
> particular regex expressions. Anyhow, I know this code works, but I
> don't know why! Does your simple rule above explain this, and if so how?
In my mind this sequence is a two-level one
but you need four '\' because backslash **itself** need to be escaped
at both level.
level 1 = when cmake runs
level 2 = when cpack runs and process CPACK_SOURCE_IGNORE_FILES.
in the end you need to get '\.' so you need \\. at level 1 output thus
\\\\. in the CMakeLists.txt
--
Erk
Le gouvernement représentatif n'est pas la démocratie --
http://www.le-message.org
More information about the cmake-developers
mailing list