[CMake] install(DIRECTORY . DESTINATION include/proj FILES_MATCHINGPATTERN "*.h")

David Cole david.cole at kitware.com
Wed Oct 28 14:37:03 EDT 2009


Actually, never mind. bar.h was a new header file, wasn't it?

The difference then is that install(DIRECTORY always scans the entire
directory structure and copies new stuff in when it appears. Seems odd to
add a header file and then not have to build anything before doing another
make install... but I guess there might be a real world use case for this?

...but looks like you are right. I retract my statement that cmake does
nothing when you add a header file and use install(DIRECTORY. It copies the
new file, as you might reasonably expect.

And file(GLOB at cmake configure time is not recommended for building or
installing files.


Sorry for the noise.


On Wed, Oct 28, 2009 at 2:32 PM, David Cole <david.cole at kitware.com> wrote:

> You are touching an existing header file...
>
> What happens if you add a new header file that was not there the first time
> you ran make install?
>
>
> On Wed, Oct 28, 2009 at 2:26 PM, Tyler Roscoe <tyler at cryptio.net> wrote:
>
>> On Wed, Oct 28, 2009 at 01:18:55PM -0400, David Cole wrote:
>> > Except: that argument is not valid in this case. Neither file(GLOB nor
>> > install(DIRECTORY will "rerun" anything if a new header file is added
>> into
>> > the directory...
>>
>> David I don't think this is correct.
>>
>> Here's a test using file(GLOB) + install(FILES):
>>
>>    [tylermr at alta:~/install-dir-vs-file-glob-test/b]$ cat
>> ../CMakeLists.txt
>>    cmake_minimum_required(VERSION 2.6)
>>    project (test)
>>
>>    set (CMAKE_INSTALL_PREFIX "/tmp/install.test.tmr")
>>
>>    file (GLOB header_files "include/*.h")
>>    install (FILES ${header_files} DESTINATION include)
>>
>>    [tylermr at alta:~/install-dir-vs-file-glob-test/b]$ cmake ..
>>    -- Configuring done
>>    -- Generating done
>>    -- Build files have been written to:
>>    /alta/tylermr/install-dir-vs-file-glob-test/b
>>
>>    [tylermr at alta:~/install-dir-vs-file-glob-test/b]$ make install
>>    Install the project...
>>    -- Install configuration: ""
>>    -- Installing: /tmp/install.test.tmr/include/foo.h
>>
>>    [tylermr at alta:~/install-dir-vs-file-glob-test/b]$ touch
>> ../include/bar.h
>>
>>    [tylermr at alta:~/install-dir-vs-file-glob-test/b]$ make install
>>    Install the project...
>>    -- Install configuration: ""
>>    -- Up-to-date: /tmp/install.test.tmr/include/foo.h
>>
>>
>> Note that CMake does not notice the addition of bar.h.
>>
>>
>> Here's a test using install(DIRECTORY):
>>
>>    [tylermr at alta:~/install-dir-vs-file-glob-test/b]$ cat
>> ../CMakeLists.txt
>>    cmake_minimum_required(VERSION 2.6)
>>    project (test)
>>
>>    set (CMAKE_INSTALL_PREFIX "/tmp/install.test.tmr")
>>
>>    install (DIRECTORY include DESTINATION include)
>>
>>    [tylermr at alta:~/install-dir-vs-file-glob-test/b]$ make install
>>    Install the project...
>>    -- Install configuration: ""
>>    -- Installing: /tmp/install.test.tmr/include/include
>>    -- Installing: /tmp/install.test.tmr/include/include/foo.h
>>
>>    [tylermr at alta:~/install-dir-vs-file-glob-test/b]$ touch
>> ../include/bar.h
>>
>>    [tylermr at alta:~/install-dir-vs-file-glob-test/b]$ make install
>>    Install the project...
>>    -- Install configuration: ""
>>    -- Installing: /tmp/install.test.tmr/include/include
>>    -- Up-to-date: /tmp/install.test.tmr/include/include/foo.h
>>    -- Installing: /tmp/install.test.tmr/include/include/bar.h
>>
>>
>> Note that bar.h is noticed and installed.
>>
>>
>> tyler
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.cmake.org/pipermail/cmake/attachments/20091028/a115bd28/attachment.htm>


More information about the CMake mailing list