On 07/09/2010 03:48 PM, Bo Thorsen wrote:
> Hi all,
> 
> Is there an elegant way of copying two files into one?
> 
> Right now, I have this:
> 
> ADD_CUSTOM_COMMAND(OUTPUT privilege_tables.sql
>                     COMMAND copy /b
>                       ${CMAKE_CURRENT_SOURCE_DIR}/system_tables.sql
>                       + ${CMAKE_CURRENT_SOURCE_DIR}/tables_fix.sql
>                       fix_privilege_tables.sql
>                     DEPENDS
>                     ${CMAKE_CURRENT_SOURCE_DIR}/system_tables.sql
>                     ${CMAKE_CURRENT_SOURCE_DIR}/tables_fix.sql)
> 
> That's hardly elegant and it doesn't work :(
> 
> The problem with this is that the Windows copy command wants \ instead of /.
> 
> So, one of two fixes are possible for me: Either there is a much cleaner 
> way to do this, or I have to replace / with \ in the path.
> 
> If I have to do the replacement, is there a better way to do this than 
> to use the STRING command with a char replace?

Look at the following CMakeLists.txt:

CMAKE_MINIMUM_REQUIRED(VERSION 2.8 FATAL_ERROR)
PROJECT(CONCAT C)
FILE(WRITE ${CMAKE_BINARY_DIR}/f1.c.in "void f1(void){}\n")
FILE(WRITE ${CMAKE_BINARY_DIR}/f2.c.in "void f2(void){}\n")
FILE(WRITE ${CMAKE_BINARY_DIR}/main.c
"int main(void){f1(); f2(); return 0;}\n"
)
FILE(WRITE ${CMAKE_BINARY_DIR}/concat.cmake "
FILE(READ \${SRC1} S1)
FILE(READ \${SRC2} S2)
FILE(WRITE \${DST} \${S1}\${S2})
")
ADD_CUSTOM_COMMAND(
    OUTPUT f.c
    COMMAND ${CMAKE_COMMAND} -D SRC1=${CMAKE_BINARY_DIR}/f1.c.in
                             -D SRC2=${CMAKE_BINARY_DIR}/f2.c.in
                             -D DST=${CMAKE_BINARY_DIR}/f.c
                             -P ${CMAKE_BINARY_DIR}/concat.cmake
    DEPENDS ${CMAKE_BINARY_DIR}/f1.c.in ${CMAKE_BINARY_DIR}/f2.c.in
)
ADD_EXECUTABLE(main main.c f.c)

Usually, one has f{1,2}.c.in, main.c and concat.cmake in the source
directory, of course. Possibly, concat.cmake may even be enhanced
with little effort to concat an arbitrary number of files.

Regards,

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