[CMake] Copy two files into one file
Bo Thorsen
bo at askmonty.org
Fri Jul 9 12:39:57 EDT 2010
Den 09-07-2010 16:48, Michael Hertling skrev:
> 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)
Does this also work with binary files? From the documentation on FILE,
this isn't really clear to me.
Bo.
More information about the CMake
mailing list