ENH: Allow custom sources in custom targets

This adds a SOURCES option to ADD_CUSTOM_TARGET, enabling users to
specify extra sources for inclusion in the target.  Such sources may not
build, but will show up in the IDE project files for convenient editing.
See issue #5848.
This commit is contained in:
Brad King 2008-10-09 11:01:23 -04:00
parent 0ad5eb177b
commit c5f70ff27f
3 changed files with 26 additions and 5 deletions

View File

@ -55,6 +55,7 @@ bool cmAddCustomTargetCommand
bool verbatim = false; bool verbatim = false;
std::string comment_buffer; std::string comment_buffer;
const char* comment = 0; const char* comment = 0;
std::vector<std::string> sources;
// Keep track of parser state. // Keep track of parser state.
enum tdoing { enum tdoing {
@ -62,6 +63,7 @@ bool cmAddCustomTargetCommand
doing_depends, doing_depends,
doing_working_directory, doing_working_directory,
doing_comment, doing_comment,
doing_source,
doing_verbatim doing_verbatim
}; };
tdoing doing = doing_command; tdoing doing = doing_command;
@ -111,6 +113,10 @@ bool cmAddCustomTargetCommand
currentLine.clear(); currentLine.clear();
} }
} }
else if(copy == "SOURCES")
{
doing = doing_source;
}
else else
{ {
switch (doing) switch (doing)
@ -128,6 +134,9 @@ bool cmAddCustomTargetCommand
comment_buffer = copy; comment_buffer = copy;
comment = comment_buffer.c_str(); comment = comment_buffer.c_str();
break; break;
case doing_source:
sources.push_back(copy);
break;
default: default:
this->SetError("Wrong syntax. Unknown type of argument."); this->SetError("Wrong syntax. Unknown type of argument.");
return false; return false;
@ -164,9 +173,13 @@ bool cmAddCustomTargetCommand
// Add the utility target to the makefile. // Add the utility target to the makefile.
bool escapeOldStyle = !verbatim; bool escapeOldStyle = !verbatim;
cmTarget* target =
this->Makefile->AddUtilityCommand(args[0].c_str(), excludeFromAll, this->Makefile->AddUtilityCommand(args[0].c_str(), excludeFromAll,
working_directory.c_str(), depends, working_directory.c_str(), depends,
commandLines, escapeOldStyle, comment); commandLines, escapeOldStyle, comment);
// Add additional user-specified source files to the target.
target->AddSources(sources);
return true; return true;
} }

View File

@ -68,7 +68,8 @@ public:
" [COMMAND command2 [args2...] ...]\n" " [COMMAND command2 [args2...] ...]\n"
" [DEPENDS depend depend depend ... ]\n" " [DEPENDS depend depend depend ... ]\n"
" [WORKING_DIRECTORY dir]\n" " [WORKING_DIRECTORY dir]\n"
" [COMMENT comment] [VERBATIM])\n" " [COMMENT comment] [VERBATIM]\n"
" [SOURCES src1 [src2...]])\n"
"Adds a target with the given name that executes the given commands. " "Adds a target with the given name that executes the given commands. "
"The target has no output file and is ALWAYS CONSIDERED OUT OF DATE " "The target has no output file and is ALWAYS CONSIDERED OUT OF DATE "
"even if the commands try to create a file with the name of the " "even if the commands try to create a file with the name of the "
@ -94,7 +95,13 @@ public:
"Use of VERBATIM is recommended as it enables correct behavior. " "Use of VERBATIM is recommended as it enables correct behavior. "
"When VERBATIM is not given the behavior is platform specific. " "When VERBATIM is not given the behavior is platform specific. "
"In the future VERBATIM may be enabled by default. The only reason " "In the future VERBATIM may be enabled by default. The only reason "
"it is an option is to preserve compatibility with older CMake code."; "it is an option is to preserve compatibility with older CMake code."
"\n"
"The SOURCES option specifies additional source files to be included "
"in the custom target. "
"Specified source files will be added to IDE project files for "
"convenience in editing even if they have not build rules."
;
} }
cmTypeMacro(cmAddCustomTargetCommand, cmCommand); cmTypeMacro(cmAddCustomTargetCommand, cmCommand);

View File

@ -100,6 +100,7 @@ ADD_CUSTOM_TARGET(TDocument ALL
${PROJECT_BINARY_DIR}/doc2.h ${PROJECT_BINARY_DIR}/doc2.h
DEPENDS ${PROJECT_BINARY_DIR}/doc1.h doc1.txt DEPENDS ${PROJECT_BINARY_DIR}/doc1.h doc1.txt
COMMENT "Running top-level TDocument commands" COMMENT "Running top-level TDocument commands"
SOURCES doc1.tex
) )
# Setup a pre- and post-build pair that will fail if not run in the # Setup a pre- and post-build pair that will fail if not run in the