mirror of
https://github.com/Kitware/CMake.git
synced 2025-10-14 02:08:27 +08:00
export: Do not fail generation for namelink-only case
This commit is contained in:
@@ -461,6 +461,28 @@ bool HandleTargetsMode(std::vector<std::string> const& args,
|
||||
std::unique_ptr<cmInstallFilesGenerator> publicHeaderGenerator;
|
||||
std::unique_ptr<cmInstallFilesGenerator> resourceGenerator;
|
||||
|
||||
auto addTargetExport = [&]() {
|
||||
// Add this install rule to an export if one was specified.
|
||||
// (If this is a namelink-only rule no export file will be generated.)
|
||||
if (!exports.empty()) {
|
||||
auto te = cm::make_unique<cmTargetExport>();
|
||||
te->TargetName = target.GetName();
|
||||
te->ArchiveGenerator = archiveGenerator.get();
|
||||
te->BundleGenerator = bundleGenerator.get();
|
||||
te->FrameworkGenerator = frameworkGenerator.get();
|
||||
te->HeaderGenerator = publicHeaderGenerator.get();
|
||||
te->LibraryGenerator = libraryGenerator.get();
|
||||
te->RuntimeGenerator = runtimeGenerator.get();
|
||||
te->ObjectsGenerator = objectGenerator.get();
|
||||
te->InterfaceIncludeDirectories =
|
||||
cmJoin(includesArgs.GetIncludeDirs(), ";");
|
||||
|
||||
helper.Makefile->GetGlobalGenerator()
|
||||
->GetExportSets()[exports]
|
||||
.AddTargetExport(std::move(te));
|
||||
}
|
||||
};
|
||||
|
||||
// Avoid selecting default destinations for PUBLIC_HEADER and
|
||||
// PRIVATE_HEADER if any artifacts are specified.
|
||||
bool artifactsSpecified = false;
|
||||
@@ -476,6 +498,7 @@ bool HandleTargetsMode(std::vector<std::string> const& args,
|
||||
if (target.IsDLLPlatform()) {
|
||||
// When in namelink only mode skip all libraries on Windows.
|
||||
if (namelinkMode == cmInstallTargetGenerator::NamelinkModeOnly) {
|
||||
addTargetExport();
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -507,6 +530,7 @@ bool HandleTargetsMode(std::vector<std::string> const& args,
|
||||
if (target.IsFrameworkOnApple()) {
|
||||
// When in namelink only mode skip frameworks.
|
||||
if (namelinkMode == cmInstallTargetGenerator::NamelinkModeOnly) {
|
||||
addTargetExport();
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -551,6 +575,7 @@ bool HandleTargetsMode(std::vector<std::string> const& args,
|
||||
if (target.IsFrameworkOnApple()) {
|
||||
// When in namelink only mode skip frameworks.
|
||||
if (namelinkMode == cmInstallTargetGenerator::NamelinkModeOnly) {
|
||||
addTargetExport();
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -744,25 +769,8 @@ bool HandleTargetsMode(std::vector<std::string> const& args,
|
||||
}
|
||||
}
|
||||
|
||||
// Add this install rule to an export if one was specified and
|
||||
// this is not a namelink-only rule.
|
||||
if (!exports.empty() && !namelinkOnly) {
|
||||
auto te = cm::make_unique<cmTargetExport>();
|
||||
te->TargetName = target.GetName();
|
||||
te->ArchiveGenerator = archiveGenerator.get();
|
||||
te->BundleGenerator = bundleGenerator.get();
|
||||
te->FrameworkGenerator = frameworkGenerator.get();
|
||||
te->HeaderGenerator = publicHeaderGenerator.get();
|
||||
te->LibraryGenerator = libraryGenerator.get();
|
||||
te->RuntimeGenerator = runtimeGenerator.get();
|
||||
te->ObjectsGenerator = objectGenerator.get();
|
||||
te->InterfaceIncludeDirectories =
|
||||
cmJoin(includesArgs.GetIncludeDirs(), ";");
|
||||
|
||||
helper.Makefile->GetGlobalGenerator()
|
||||
->GetExportSets()[exports]
|
||||
.AddTargetExport(std::move(te));
|
||||
}
|
||||
// Add this install rule to an export if one was specified.
|
||||
addTargetExport();
|
||||
|
||||
// Keep track of whether we're installing anything in each category
|
||||
installsArchive = installsArchive || archiveGenerator;
|
||||
|
9
Tests/RunCMake/export/NamelinkOnlyExport.cmake
Normal file
9
Tests/RunCMake/export/NamelinkOnlyExport.cmake
Normal file
@@ -0,0 +1,9 @@
|
||||
enable_language(CXX)
|
||||
add_library(foo SHARED empty.cpp)
|
||||
install(TARGETS foo EXPORT fooExport
|
||||
RUNTIME DESTINATION bin
|
||||
LIBRARY
|
||||
DESTINATION lib
|
||||
NAMELINK_ONLY
|
||||
)
|
||||
export(EXPORT fooExport FILE "${CMAKE_CURRENT_BINARY_DIR}/foo.cmake")
|
@@ -15,3 +15,5 @@ run_cmake(ForbiddenToExportPropertyWithGenExp)
|
||||
run_cmake(ExportPropertiesUndefined)
|
||||
run_cmake(DependOnNotExport)
|
||||
run_cmake(DependOnDoubleExport)
|
||||
run_cmake(UnknownExport)
|
||||
run_cmake(NamelinkOnlyExport)
|
||||
|
1
Tests/RunCMake/export/UnknownExport-result.txt
Normal file
1
Tests/RunCMake/export/UnknownExport-result.txt
Normal file
@@ -0,0 +1 @@
|
||||
1
|
4
Tests/RunCMake/export/UnknownExport-stderr.txt
Normal file
4
Tests/RunCMake/export/UnknownExport-stderr.txt
Normal file
@@ -0,0 +1,4 @@
|
||||
CMake Error at UnknownExport\.cmake:[0-9]+ \(export\):
|
||||
export Export set "fooExport" not found\.
|
||||
Call Stack \(most recent call first\):
|
||||
CMakeLists.txt:3 \(include\)
|
2
Tests/RunCMake/export/UnknownExport.cmake
Normal file
2
Tests/RunCMake/export/UnknownExport.cmake
Normal file
@@ -0,0 +1,2 @@
|
||||
enable_language(CXX)
|
||||
export(EXPORT fooExport FILE "${CMAKE_CURRENT_BINARY_DIR}/foo.cmake")
|
12
Tests/RunCMake/install/EXPORT-NamelinkOnly.cmake
Normal file
12
Tests/RunCMake/install/EXPORT-NamelinkOnly.cmake
Normal file
@@ -0,0 +1,12 @@
|
||||
enable_language(C)
|
||||
add_library(foo SHARED empty.c)
|
||||
install(TARGETS foo EXPORT fooExport
|
||||
RUNTIME DESTINATION bin
|
||||
LIBRARY
|
||||
DESTINATION lib
|
||||
NAMELINK_ONLY
|
||||
)
|
||||
install(EXPORT fooExport
|
||||
DESTINATION "lib/cmake/"
|
||||
FILE "foo.cmake"
|
||||
)
|
1
Tests/RunCMake/install/EXPORT-UnknownExport-result.txt
Normal file
1
Tests/RunCMake/install/EXPORT-UnknownExport-result.txt
Normal file
@@ -0,0 +1 @@
|
||||
1
|
1
Tests/RunCMake/install/EXPORT-UnknownExport-stderr.txt
Normal file
1
Tests/RunCMake/install/EXPORT-UnknownExport-stderr.txt
Normal file
@@ -0,0 +1 @@
|
||||
CMake Error: INSTALL\(EXPORT\) given unknown export "fooExport"
|
5
Tests/RunCMake/install/EXPORT-UnknownExport.cmake
Normal file
5
Tests/RunCMake/install/EXPORT-UnknownExport.cmake
Normal file
@@ -0,0 +1,5 @@
|
||||
enable_language(C)
|
||||
install(EXPORT fooExport
|
||||
DESTINATION "lib/cmake/"
|
||||
FILE "foo.cmake"
|
||||
)
|
@@ -76,6 +76,8 @@ run_cmake(DIRECTORY-DESTINATION-bad)
|
||||
run_cmake(FILES-DESTINATION-bad)
|
||||
run_cmake(TARGETS-DESTINATION-bad)
|
||||
run_cmake(EXPORT-OldIFace)
|
||||
run_cmake(EXPORT-UnknownExport)
|
||||
run_cmake(EXPORT-NamelinkOnly)
|
||||
run_cmake(CMP0062-OLD)
|
||||
run_cmake(CMP0062-NEW)
|
||||
run_cmake(CMP0062-WARN)
|
||||
|
Reference in New Issue
Block a user