This commit is contained in:
Ken Martin 2003-06-03 10:34:15 -04:00
parent ba68f771b3
commit 7b3f2d4420
6 changed files with 140 additions and 0 deletions

View File

@ -0,0 +1,105 @@
#
# Wrapping
#
PROJECT (CustomCommand)
#
# Lib and exe path
#
SET (LIBRARY_OUTPUT_PATH
${PROJECT_BINARY_DIR}/bin/ CACHE PATH
"Single output directory for building all libraries.")
SET (EXECUTABLE_OUTPUT_PATH
${PROJECT_BINARY_DIR}/bin/ CACHE PATH
"Single output directory for building all executables.")
################################################################
#
# First test using a compiled generator to create a .c file
#
################################################################
# add the executable that will generate the file
ADD_EXECUTABLE(generator generator.c)
# the folowing assumes that a cmSourceFile
# is instantiated for the output, with GENERATED 1
# at the end of the day this becomes a what in VS ?
ADD_CUSTOM_COMMAND(OUTPUT ${PROJECT_BINARY_DIR}/generated.c
DEPENDS generator
COMMAND ${EXECUTABLE_OUTPUT_PATH}/${CMAKE_CFG_INTDIR}/generator
ARGS ${PROJECT_BINARY_DIR}/generated.c
)
################################################################
#
# Test using a wrapper to wrap a header file
#
################################################################
# add the executable that will generate the file
ADD_EXECUTABLE(wrapper wrapper.c)
# the following assumes that a cmSourceFile
# is instantiated for the output, with GENERATED 1
# at the end of the day this becomes a what in VS ?
ADD_CUSTOM_COMMAND(
OUTPUT ${PROJECT_BINARY_DIR}/wrapped.c
DEPENDS wrapper
MAIN_DEPENDENCY ${PROJECT_SOURCE_DIR}/wrapped.h
COMMAND ${EXECUTABLE_OUTPUT_PATH}/${CMAKE_CFG_INTDIR}/wrapper
ARGS ${PROJECT_BINARY_DIR}/wrapped.c ${PROJECT_SOURCE_DIR}/wrapped.h
)
################################################################
#
# Test creating files from a custom target
#
################################################################
ADD_CUSTOM_COMMAND(OUTPUT ${PROJECT_BINARY_DIR}/doc1.dvi
DEPENDS ${PROJECT_SOURCE_DIR}/doc1.tex
COMMAND ${CMAKE_COMMAND}
ARGS -E copy ${PROJECT_SOURCE_DIR}/doc1.tex
${PROJECT_BINARY_DIR}/doc1.dvi
)
ADD_CUSTOM_COMMAND(OUTPUT ${PROJECT_BINARY_DIR}/doc1.h
DEPENDS ${PROJECT_BINARY_DIR}/doc1.dvi
COMMAND ${CMAKE_COMMAND}
ARGS -E copy ${PROJECT_BINARY_DIR}/doc1.dvi
${PROJECT_BINARY_DIR}/doc1.h
)
ADD_CUSTOM_TARGET(TDocument ALL
${CMAKE_COMMAND} -E echo "building doc1.h"
DEPENDS ${PROJECT_BINARY_DIR}/doc1.h
)
################################################################
#
# Test using a multistep generated file
#
################################################################
ADD_CUSTOM_COMMAND(OUTPUT ${PROJECT_BINARY_DIR}/foo.pre
DEPENDS ${PROJECT_SOURCE_DIR}/foo.in
COMMAND ${CMAKE_COMMAND}
ARGS -E copy ${PROJECT_SOURCE_DIR}/foo.in
${PROJECT_BINARY_DIR}/foo.pre
)
ADD_CUSTOM_COMMAND(OUTPUT ${PROJECT_BINARY_DIR}/foo.c
DEPENDS TDocument ${PROJECT_BINARY_DIR}/foo.pre
COMMAND ${CMAKE_COMMAND}
ARGS -E copy ${PROJECT_BINARY_DIR}/foo.pre
${PROJECT_BINARY_DIR}/foo.c
)
# add the library
ADD_EXECUTABLE(CustomCommand
${PROJECT_BINARY_DIR}/foo.c
${PROJECT_BINARY_DIR}/wrapped.c
${PROJECT_BINARY_DIR}/generated.c
)
# must add a dependency on TDocument otherwise it might never build and
# the CustomCommand executable really needs doc1.h
ADD_DEPENDENCIES(CustomCommand TDocument)

View File

@ -0,0 +1 @@
int doc() { return 7;}

View File

@ -0,0 +1,15 @@
#include "doc1.h"
int generated();
int wrapped();
int main ()
{
if (generated()*wrapped()*doc() == 3*5*7)
{
return 0;
}
return -1;
}

View File

@ -0,0 +1,9 @@
#include <stdio.h>
main(int argc, char *argv[])
{
FILE *fp = fopen(argv[1],"w");
fprintf(fp,"int generated() { return 3; }\n");
fclose(fp);
}

View File

@ -0,0 +1 @@
/* empty file */

View File

@ -0,0 +1,9 @@
#include <stdio.h>
main(int argc, char *argv[])
{
FILE *fp = fopen(argv[1],"w");
fprintf(fp,"int wrapped() { return 5; }\n");
fclose(fp);
}