mirror of
https://gitlab.kitware.com/cmake/cmake.git
synced 2026-09-25 04:09:36 +03:00
@@ -0,0 +1,4 @@
|
|||||||
|
cps-import-executable
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
* CPS import now supports `executable` components.
|
||||||
@@ -869,7 +869,7 @@ void cmPackageInfoReader::ReadCxxModulesMetadata(
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
cmTarget* cmPackageInfoReader::AddLibraryComponent(
|
cmTarget* cmPackageInfoReader::AddComponent(
|
||||||
cmMakefile* makefile, cm::TargetType type, std::string const& name,
|
cmMakefile* makefile, cm::TargetType type, std::string const& name,
|
||||||
Json::Value const& data, std::string const& package,
|
Json::Value const& data, std::string const& package,
|
||||||
cm::ImportedTargetScope scope) const
|
cm::ImportedTargetScope scope) const
|
||||||
@@ -959,14 +959,16 @@ bool cmPackageInfoReader::ImportTargets(cmMakefile* makefile,
|
|||||||
}
|
}
|
||||||
|
|
||||||
auto createTarget = [&](cm::TargetType typeEnum) {
|
auto createTarget = [&](cm::TargetType typeEnum) {
|
||||||
return this->AddLibraryComponent(makefile, typeEnum, fullName, *ci,
|
return this->AddComponent(makefile, typeEnum, fullName, *ci, package,
|
||||||
package, scope);
|
scope);
|
||||||
};
|
};
|
||||||
|
|
||||||
cmTarget* target = nullptr;
|
cmTarget* target = nullptr;
|
||||||
if (type == "symbolic"_s) {
|
if (type == "symbolic"_s) {
|
||||||
target = createTarget(cm::TargetType::INTERFACE_LIBRARY);
|
target = createTarget(cm::TargetType::INTERFACE_LIBRARY);
|
||||||
target->SetSymbolic(true);
|
target->SetSymbolic(true);
|
||||||
|
} else if (type == "executable"_s) {
|
||||||
|
target = createTarget(cm::TargetType::EXECUTABLE);
|
||||||
} else if (type == "dylib"_s) {
|
} else if (type == "dylib"_s) {
|
||||||
target = createTarget(cm::TargetType::SHARED_LIBRARY);
|
target = createTarget(cm::TargetType::SHARED_LIBRARY);
|
||||||
} else if (type == "module"_s) {
|
} else if (type == "module"_s) {
|
||||||
|
|||||||
@@ -90,11 +90,10 @@ public:
|
|||||||
private:
|
private:
|
||||||
cmPackageInfoReader() = default;
|
cmPackageInfoReader() = default;
|
||||||
|
|
||||||
cmTarget* AddLibraryComponent(cmMakefile* makefile, cm::TargetType type,
|
cmTarget* AddComponent(cmMakefile* makefile, cm::TargetType type,
|
||||||
std::string const& name,
|
std::string const& name, Json::Value const& data,
|
||||||
Json::Value const& data,
|
std::string const& package,
|
||||||
std::string const& package,
|
cm::ImportedTargetScope scope) const;
|
||||||
cm::ImportedTargetScope scope) const;
|
|
||||||
|
|
||||||
void AddTargetConfiguration(cmTarget* target,
|
void AddTargetConfiguration(cmTarget* target,
|
||||||
cm::string_view configuration) const;
|
cm::string_view configuration) const;
|
||||||
|
|||||||
@@ -169,17 +169,25 @@ elseif(NOT TARGET Foo::PrefixTest)
|
|||||||
message(SEND_ERROR "Foo::PrefixTest missing !")
|
message(SEND_ERROR "Foo::PrefixTest missing !")
|
||||||
elseif(NOT TARGET Foo::RelativeTest)
|
elseif(NOT TARGET Foo::RelativeTest)
|
||||||
message(SEND_ERROR "Foo::RelativeTest missing !")
|
message(SEND_ERROR "Foo::RelativeTest missing !")
|
||||||
|
elseif(NOT TARGET Foo::ExecutableTest)
|
||||||
|
message(SEND_ERROR "Foo::ExecutableTest missing !")
|
||||||
elseif(NOT TARGET Foo::Empty)
|
elseif(NOT TARGET Foo::Empty)
|
||||||
message(SEND_ERROR "Foo::Empty missing !")
|
message(SEND_ERROR "Foo::Empty missing !")
|
||||||
else()
|
else()
|
||||||
|
expect_property(Foo::PrefixTest TYPE "type" "INTERFACE_LIBRARY")
|
||||||
expect_property(
|
expect_property(
|
||||||
Foo::PrefixTest INTERFACE_INCLUDE_DIRECTORIES "includes"
|
Foo::PrefixTest INTERFACE_INCLUDE_DIRECTORIES "includes"
|
||||||
"$<$<CONFIG:default>:${CMAKE_CURRENT_SOURCE_DIR}/include>")
|
"$<$<CONFIG:default>:${CMAKE_CURRENT_SOURCE_DIR}/include>")
|
||||||
|
|
||||||
|
expect_property(Foo::RelativeTest TYPE "type" "INTERFACE_LIBRARY")
|
||||||
expect_property(
|
expect_property(
|
||||||
Foo::RelativeTest INTERFACE_INCLUDE_DIRECTORIES "includes"
|
Foo::RelativeTest INTERFACE_INCLUDE_DIRECTORIES "includes"
|
||||||
"$<$<CONFIG:default>:${CMAKE_CURRENT_SOURCE_DIR}/cps/../include>")
|
"$<$<CONFIG:default>:${CMAKE_CURRENT_SOURCE_DIR}/cps/../include>")
|
||||||
|
|
||||||
|
expect_property(Foo::ExecutableTest TYPE "type" "EXECUTABLE")
|
||||||
|
expect_property(Foo::ExecutableTest IMPORTED_LOCATION_DEFAULT "location"
|
||||||
|
"${CMAKE_CURRENT_SOURCE_DIR}/foo")
|
||||||
|
|
||||||
expect_global(Foo::Empty FALSE)
|
expect_global(Foo::Empty FALSE)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
|||||||
@@ -9,6 +9,9 @@
|
|||||||
},
|
},
|
||||||
"Empty": {
|
"Empty": {
|
||||||
"type": "interface"
|
"type": "interface"
|
||||||
|
},
|
||||||
|
"ExecutableTest": {
|
||||||
|
"type": "executable"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,6 +5,9 @@
|
|||||||
"components": {
|
"components": {
|
||||||
"PrefixTest": {
|
"PrefixTest": {
|
||||||
"includes": ["@prefix@/include"]
|
"includes": ["@prefix@/include"]
|
||||||
|
},
|
||||||
|
"ExecutableTest": {
|
||||||
|
"location": "@prefix@/foo"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,4 +14,5 @@ function(build_project test)
|
|||||||
endfunction()
|
endfunction()
|
||||||
|
|
||||||
build_project(TestLibrary)
|
build_project(TestLibrary)
|
||||||
|
build_project(TestTool)
|
||||||
build_project(TestExecutable)
|
build_project(TestExecutable)
|
||||||
|
|||||||
@@ -2,10 +2,18 @@ project(TestLibrary C)
|
|||||||
|
|
||||||
set(liba_DIR "${CMAKE_BINARY_DIR}/../TestLibrary-build/cps/liba")
|
set(liba_DIR "${CMAKE_BINARY_DIR}/../TestLibrary-build/cps/liba")
|
||||||
set(libb_DIR "${CMAKE_BINARY_DIR}/../TestLibrary-build/cps/libb")
|
set(libb_DIR "${CMAKE_BINARY_DIR}/../TestLibrary-build/cps/libb")
|
||||||
|
set(tool_DIR "${CMAKE_BINARY_DIR}/../TestTool-build/cps/tool")
|
||||||
|
|
||||||
find_package(libb REQUIRED COMPONENTS libb)
|
find_package(libb REQUIRED COMPONENTS libb)
|
||||||
|
find_package(tool REQUIRED COMPONENTS tool)
|
||||||
|
|
||||||
add_executable(app app.c)
|
add_custom_command(
|
||||||
|
OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/gen.c"
|
||||||
|
COMMAND tool::tool "${CMAKE_CURRENT_BINARY_DIR}/gen.c"
|
||||||
|
VERBATIM
|
||||||
|
)
|
||||||
|
|
||||||
|
add_executable(app app.c "${CMAKE_CURRENT_BINARY_DIR}/gen.c")
|
||||||
|
|
||||||
target_link_libraries(app PUBLIC libb::libb)
|
target_link_libraries(app PUBLIC libb::libb)
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,6 @@
|
|||||||
|
project(TestTool C)
|
||||||
|
|
||||||
|
add_executable(tool tool.c)
|
||||||
|
|
||||||
|
install(TARGETS tool EXPORT tool)
|
||||||
|
export(PACKAGE_INFO tool EXPORT tool)
|
||||||
@@ -1,8 +1,10 @@
|
|||||||
#include <libb.h>
|
#include <libb.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
|
extern int gen(void);
|
||||||
|
|
||||||
int main(void)
|
int main(void)
|
||||||
{
|
{
|
||||||
printf("%i\n", ask());
|
printf("%i\n", ask() + gen());
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,24 @@
|
|||||||
|
#ifndef _CRT_SECURE_NO_DEPRECATE
|
||||||
|
# define _CRT_SECURE_NO_DEPRECATE
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
int main(int argc, char* argv[])
|
||||||
|
{
|
||||||
|
FILE* out;
|
||||||
|
|
||||||
|
if (argc < 2) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
out = fopen(argv[1], "w");
|
||||||
|
if (!out) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
fprintf(out, "int gen(void)\n{\n return 42;\n}\n");
|
||||||
|
fclose(out);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
@@ -15,4 +15,5 @@ function(build_project test)
|
|||||||
endfunction()
|
endfunction()
|
||||||
|
|
||||||
build_project(TestLibrary)
|
build_project(TestLibrary)
|
||||||
|
build_project(TestTool)
|
||||||
build_project(TestExecutable)
|
build_project(TestExecutable)
|
||||||
|
|||||||
@@ -4,8 +4,15 @@ set(CMAKE_PREFIX_PATH "${CMAKE_BINARY_DIR}/../install")
|
|||||||
set(CMAKE_INSTALL_PREFIX "${CMAKE_BINARY_DIR}/../install")
|
set(CMAKE_INSTALL_PREFIX "${CMAKE_BINARY_DIR}/../install")
|
||||||
|
|
||||||
find_package(libb REQUIRED COMPONENTS libb)
|
find_package(libb REQUIRED COMPONENTS libb)
|
||||||
|
find_package(tool REQUIRED COMPONENTS tool)
|
||||||
|
|
||||||
add_executable(app app.c)
|
add_custom_command(
|
||||||
|
OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/gen.c"
|
||||||
|
COMMAND tool::tool "${CMAKE_CURRENT_BINARY_DIR}/gen.c"
|
||||||
|
VERBATIM
|
||||||
|
)
|
||||||
|
|
||||||
|
add_executable(app app.c "${CMAKE_CURRENT_BINARY_DIR}/gen.c")
|
||||||
|
|
||||||
target_link_libraries(app PUBLIC libb::libb)
|
target_link_libraries(app PUBLIC libb::libb)
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,8 @@
|
|||||||
|
project(TestTool C)
|
||||||
|
|
||||||
|
set(CMAKE_INSTALL_PREFIX "${CMAKE_BINARY_DIR}/../install")
|
||||||
|
|
||||||
|
add_executable(tool tool.c)
|
||||||
|
|
||||||
|
install(TARGETS tool EXPORT tool)
|
||||||
|
install(PACKAGE_INFO tool DESTINATION cps EXPORT tool)
|
||||||
@@ -1,8 +1,10 @@
|
|||||||
#include <libb.h>
|
#include <libb.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
|
extern int gen(void);
|
||||||
|
|
||||||
int main(void)
|
int main(void)
|
||||||
{
|
{
|
||||||
printf("%i\n", ask());
|
printf("%i\n", ask() + gen());
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,24 @@
|
|||||||
|
#ifndef _CRT_SECURE_NO_DEPRECATE
|
||||||
|
# define _CRT_SECURE_NO_DEPRECATE
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
int main(int argc, char* argv[])
|
||||||
|
{
|
||||||
|
FILE* out;
|
||||||
|
|
||||||
|
if (argc < 2) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
out = fopen(argv[1], "w");
|
||||||
|
if (!out) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
fprintf(out, "int gen(void)\n{\n return 42;\n}\n");
|
||||||
|
fclose(out);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user