mirror of
https://github.com/Kitware/CMake.git
synced 2025-10-15 03:48:02 +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> publicHeaderGenerator;
|
||||||
std::unique_ptr<cmInstallFilesGenerator> resourceGenerator;
|
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
|
// Avoid selecting default destinations for PUBLIC_HEADER and
|
||||||
// PRIVATE_HEADER if any artifacts are specified.
|
// PRIVATE_HEADER if any artifacts are specified.
|
||||||
bool artifactsSpecified = false;
|
bool artifactsSpecified = false;
|
||||||
@@ -476,6 +498,7 @@ bool HandleTargetsMode(std::vector<std::string> const& args,
|
|||||||
if (target.IsDLLPlatform()) {
|
if (target.IsDLLPlatform()) {
|
||||||
// When in namelink only mode skip all libraries on Windows.
|
// When in namelink only mode skip all libraries on Windows.
|
||||||
if (namelinkMode == cmInstallTargetGenerator::NamelinkModeOnly) {
|
if (namelinkMode == cmInstallTargetGenerator::NamelinkModeOnly) {
|
||||||
|
addTargetExport();
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -507,6 +530,7 @@ bool HandleTargetsMode(std::vector<std::string> const& args,
|
|||||||
if (target.IsFrameworkOnApple()) {
|
if (target.IsFrameworkOnApple()) {
|
||||||
// When in namelink only mode skip frameworks.
|
// When in namelink only mode skip frameworks.
|
||||||
if (namelinkMode == cmInstallTargetGenerator::NamelinkModeOnly) {
|
if (namelinkMode == cmInstallTargetGenerator::NamelinkModeOnly) {
|
||||||
|
addTargetExport();
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -551,6 +575,7 @@ bool HandleTargetsMode(std::vector<std::string> const& args,
|
|||||||
if (target.IsFrameworkOnApple()) {
|
if (target.IsFrameworkOnApple()) {
|
||||||
// When in namelink only mode skip frameworks.
|
// When in namelink only mode skip frameworks.
|
||||||
if (namelinkMode == cmInstallTargetGenerator::NamelinkModeOnly) {
|
if (namelinkMode == cmInstallTargetGenerator::NamelinkModeOnly) {
|
||||||
|
addTargetExport();
|
||||||
continue;
|
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
|
// Add this install rule to an export if one was specified.
|
||||||
// this is not a namelink-only rule.
|
addTargetExport();
|
||||||
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));
|
|
||||||
}
|
|
||||||
|
|
||||||
// Keep track of whether we're installing anything in each category
|
// Keep track of whether we're installing anything in each category
|
||||||
installsArchive = installsArchive || archiveGenerator;
|
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(ExportPropertiesUndefined)
|
||||||
run_cmake(DependOnNotExport)
|
run_cmake(DependOnNotExport)
|
||||||
run_cmake(DependOnDoubleExport)
|
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(FILES-DESTINATION-bad)
|
||||||
run_cmake(TARGETS-DESTINATION-bad)
|
run_cmake(TARGETS-DESTINATION-bad)
|
||||||
run_cmake(EXPORT-OldIFace)
|
run_cmake(EXPORT-OldIFace)
|
||||||
|
run_cmake(EXPORT-UnknownExport)
|
||||||
|
run_cmake(EXPORT-NamelinkOnly)
|
||||||
run_cmake(CMP0062-OLD)
|
run_cmake(CMP0062-OLD)
|
||||||
run_cmake(CMP0062-NEW)
|
run_cmake(CMP0062-NEW)
|
||||||
run_cmake(CMP0062-WARN)
|
run_cmake(CMP0062-WARN)
|
||||||
|
Reference in New Issue
Block a user