mirror of
https://github.com/reactos/CMake.git
synced 2024-11-24 03:59:58 +00:00
automoc: Add source file to target early to set the linker language
Previously, GetIncludeDirectories was called before calling
target->AddSourceFile(mocCppSource). Since commit a1c4905f
(Use the
link information as a source of compile definitions and
includes., 2013-02-12), the include directories are determined by
the link information.
Valid link information requires that the linker language can be
determined, which depends on the source files languages and the
dependent targets languages. In the case of the no_link_languages
target in the unit test, there are no dependencies and the additional
source file no_link_languages_automoc.cpp is added to the target
at generate-time. That file can be used to determine the linker
language, but it must be added to the target before calling
GetIncludeDirectories.
This commit is contained in:
parent
4515b09731
commit
79568f95ab
@ -1067,6 +1067,8 @@ bool cmGlobalGenerator::CheckTargets()
|
||||
void cmGlobalGenerator::CreateAutomocTargets()
|
||||
{
|
||||
#ifdef CMAKE_BUILD_WITH_CMAKE
|
||||
typedef std::vector<std::pair<cmQtAutomoc, cmTarget*> > Automocs;
|
||||
Automocs automocs;
|
||||
for(unsigned int i=0; i < this->LocalGenerators.size(); ++i)
|
||||
{
|
||||
cmTargets& targets =
|
||||
@ -1084,11 +1086,17 @@ void cmGlobalGenerator::CreateAutomocTargets()
|
||||
if(target.GetPropertyAsBool("AUTOMOC") && !target.IsImported())
|
||||
{
|
||||
cmQtAutomoc automoc;
|
||||
automoc.SetupAutomocTarget(&target);
|
||||
automoc.InitializeMocSourceFile(&target);
|
||||
automocs.push_back(std::make_pair(automoc, &target));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
for (Automocs::iterator it = automocs.begin(); it != automocs.end();
|
||||
++it)
|
||||
{
|
||||
it->first.SetupAutomocTarget(it->second);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@ -119,6 +119,22 @@ cmQtAutomoc::cmQtAutomoc()
|
||||
}
|
||||
}
|
||||
|
||||
void cmQtAutomoc::InitializeMocSourceFile(cmTarget* target)
|
||||
{
|
||||
std::string automocTargetName = target->GetName();
|
||||
cmMakefile *makefile = target->GetMakefile();
|
||||
automocTargetName += "_automoc";
|
||||
std::string mocCppFile = makefile->GetCurrentOutputDirectory();
|
||||
mocCppFile += "/";
|
||||
mocCppFile += automocTargetName;
|
||||
mocCppFile += ".cpp";
|
||||
cmSourceFile* mocCppSource = makefile->GetOrCreateSource(mocCppFile.c_str(),
|
||||
true);
|
||||
makefile->AppendProperty("ADDITIONAL_MAKE_CLEAN_FILES",
|
||||
mocCppFile.c_str(), false);
|
||||
|
||||
target->AddSourceFile(mocCppSource);
|
||||
}
|
||||
|
||||
void cmQtAutomoc::SetupAutomocTarget(cmTarget* target)
|
||||
{
|
||||
@ -268,17 +284,6 @@ void cmQtAutomoc::SetupAutomocTarget(cmTarget* target)
|
||||
outputFile += "/AutomocInfo.cmake";
|
||||
makefile->ConfigureFile(inputFile.c_str(), outputFile.c_str(),
|
||||
false, true, false);
|
||||
|
||||
std::string mocCppFile = makefile->GetCurrentOutputDirectory();
|
||||
mocCppFile += "/";
|
||||
mocCppFile += automocTargetName;
|
||||
mocCppFile += ".cpp";
|
||||
cmSourceFile* mocCppSource = makefile->GetOrCreateSource(mocCppFile.c_str(),
|
||||
true);
|
||||
target->AddSourceFile(mocCppSource);
|
||||
|
||||
makefile->AppendProperty("ADDITIONAL_MAKE_CLEAN_FILES",
|
||||
mocCppFile.c_str(), false);
|
||||
}
|
||||
|
||||
|
||||
|
@ -23,6 +23,7 @@ public:
|
||||
cmQtAutomoc();
|
||||
bool Run(const char* targetDirectory);
|
||||
|
||||
void InitializeMocSourceFile(cmTarget* target);
|
||||
void SetupAutomocTarget(cmTarget* target);
|
||||
|
||||
private:
|
||||
|
@ -38,3 +38,9 @@ generate_export_header(libC)
|
||||
target_link_libraries(libC LINK_PUBLIC libB)
|
||||
|
||||
target_link_libraries(foo codeeditorLib ${QT_LIBRARIES} libC)
|
||||
|
||||
add_library(empty STATIC empty.cpp)
|
||||
set_target_properties(empty PROPERTIES AUTOMOC TRUE)
|
||||
target_link_libraries(empty no_link_language)
|
||||
add_library(no_link_language STATIC empty.h)
|
||||
set_target_properties(no_link_language PROPERTIES AUTOMOC TRUE)
|
||||
|
1
Tests/QtAutomoc/empty.cpp
Normal file
1
Tests/QtAutomoc/empty.cpp
Normal file
@ -0,0 +1 @@
|
||||
// No content
|
9
Tests/QtAutomoc/empty.h
Normal file
9
Tests/QtAutomoc/empty.h
Normal file
@ -0,0 +1,9 @@
|
||||
|
||||
#include <QObject>
|
||||
|
||||
class Empty : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit Empty(QObject *parent = 0) {}
|
||||
};
|
Loading…
Reference in New Issue
Block a user