Skip to content

Commit af3807c

Browse files
committed
Add support for private- target options
1 parent 17f085c commit af3807c

File tree

4 files changed

+63
-14
lines changed

4 files changed

+63
-14
lines changed

cmake/cmkr.cmake

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ include_guard()
22

33
# Change these defaults to point to your infrastructure if desired
44
set(CMKR_REPO "https://github.com/build-cpp/cmkr" CACHE STRING "cmkr git repository" FORCE)
5-
set(CMKR_TAG "archive_64b58425" CACHE STRING "cmkr git tag (this needs to be available forever)" FORCE)
5+
set(CMKR_TAG "archive_5ad6134e" CACHE STRING "cmkr git tag (this needs to be available forever)" FORCE)
66

77
# Set these from the command line to customize for development/debugging purposes
88
set(CMKR_EXECUTABLE "" CACHE FILEPATH "cmkr executable")

include/cmake.hpp

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,17 +56,33 @@ struct Target {
5656
std::string name;
5757
TargetType type = {};
5858

59+
ConditionVector headers;
60+
ConditionVector sources;
61+
5962
// https://cmake.org/cmake/help/latest/manual/cmake-commands.7.html#project-commands
6063
ConditionVector compile_definitions;
64+
ConditionVector private_compile_definitions;
65+
6166
ConditionVector compile_features;
67+
ConditionVector private_compile_features;
68+
6269
ConditionVector compile_options;
70+
ConditionVector private_compile_options;
71+
6372
ConditionVector include_directories;
73+
ConditionVector private_include_directories;
74+
6475
ConditionVector link_directories;
76+
ConditionVector private_link_directories;
77+
6578
ConditionVector link_libraries;
79+
ConditionVector private_link_libraries;
80+
6681
ConditionVector link_options;
82+
ConditionVector private_link_options;
83+
6784
ConditionVector precompile_headers;
68-
ConditionVector headers;
69-
ConditionVector sources;
85+
ConditionVector private_precompile_headers;
7086

7187
std::string alias;
7288
tsl::ordered_map<std::string, std::string> properties;

src/cmake.cpp

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -183,14 +183,30 @@ CMake::CMake(const std::string &path, bool build) {
183183

184184
get_optional(t, "headers", target.headers);
185185
get_optional(t, "sources", target.sources);
186+
186187
get_optional(t, "compile-definitions", target.compile_definitions);
188+
get_optional(t, "private-compile-definitions", target.private_compile_definitions);
189+
187190
get_optional(t, "compile-features", target.compile_features);
191+
get_optional(t, "private-compile-features", target.private_compile_features);
192+
188193
get_optional(t, "compile-options", target.compile_options);
194+
get_optional(t, "private-compile-options", target.private_compile_options);
195+
189196
get_optional(t, "include-directories", target.include_directories);
197+
get_optional(t, "private-include-directories", target.private_include_directories);
198+
190199
get_optional(t, "link-directories", target.link_directories);
200+
get_optional(t, "private-link-directories", target.private_link_directories);
201+
191202
get_optional(t, "link-libraries", target.link_libraries);
203+
get_optional(t, "private-link-libraries", target.private_link_libraries);
204+
192205
get_optional(t, "link-options", target.link_options);
206+
get_optional(t, "private-link-options", target.private_link_options);
207+
193208
get_optional(t, "precompile-headers", target.precompile_headers);
209+
get_optional(t, "private-precompile-headers", target.private_precompile_headers);
194210

195211
if (!target.headers.empty()) {
196212
auto &sources = target.sources.nth(0).value();

src/gen.cpp

Lines changed: 28 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -568,6 +568,7 @@ int generate_cmake(const char *path, bool root) {
568568
cmd("FetchContent_MakeAvailable")("vcpkg");
569569
cmd("include")("${vcpkg_SOURCE_DIR}/scripts/buildsystems/vcpkg.cmake");
570570
cmd("endif")();
571+
endl();
571572
// clang-format on
572573

573574
// Generate vcpkg.json
@@ -749,19 +750,34 @@ int generate_cmake(const char *path, bool root) {
749750
cmd("add_library")(target.alias, "ALIAS", target.name);
750751
}
751752

752-
auto target_cmd = [&](const char *command, const cmake::ConditionVector &cargs) {
753-
gen.handle_condition(
754-
cargs, [&](const std::string &, const std::vector<std::string> &args) { cmd(command)(target.name, target_scope, args); });
753+
auto target_cmd = [&](const char *command, const cmake::ConditionVector &cargs, const std::string &scope) {
754+
gen.handle_condition(cargs,
755+
[&](const std::string &, const std::vector<std::string> &args) { cmd(command)(target.name, scope, args); });
755756
};
756757

757-
target_cmd("target_compile_definitions", target.compile_definitions);
758-
target_cmd("target_compile_features", target.compile_features);
759-
target_cmd("target_compile_options", target.compile_options);
760-
target_cmd("target_include_directories", target.include_directories);
761-
target_cmd("target_link_directories", target.link_directories);
762-
target_cmd("target_link_libraries", target.link_libraries);
763-
target_cmd("target_link_options", target.link_options);
764-
target_cmd("target_precompile_headers", target.precompile_headers);
758+
target_cmd("target_compile_definitions", target.compile_definitions, target_scope);
759+
target_cmd("target_compile_definitions", target.private_compile_definitions, "PRIVATE");
760+
761+
target_cmd("target_compile_features", target.compile_features, target_scope);
762+
target_cmd("target_compile_features", target.private_compile_features, "PRIVATE");
763+
764+
target_cmd("target_compile_options", target.compile_options, target_scope);
765+
target_cmd("target_compile_options", target.private_compile_options, "PRIVATE");
766+
767+
target_cmd("target_include_directories", target.include_directories, target_scope);
768+
target_cmd("target_include_directories", target.private_include_directories, "PRIVATE");
769+
770+
target_cmd("target_link_directories", target.link_directories, target_scope);
771+
target_cmd("target_link_directories", target.private_link_directories, "PRIVATE");
772+
773+
target_cmd("target_link_libraries", target.link_libraries, target_scope);
774+
target_cmd("target_link_libraries", target.private_link_libraries, "PRIVATE");
775+
776+
target_cmd("target_link_options", target.link_options, target_scope);
777+
target_cmd("target_link_options", target.private_link_options, "PRIVATE");
778+
779+
target_cmd("target_precompile_headers", target.precompile_headers, target_scope);
780+
target_cmd("target_precompile_headers", target.private_precompile_headers, "PRIVATE");
765781

766782
if (!target.properties.empty()) {
767783
cmd("set_target_properties")(target.name, "PROPERTIES", target.properties).endl();
@@ -773,6 +789,7 @@ int generate_cmake(const char *path, bool root) {
773789

774790
cmd("unset")("CMKR_TARGET");
775791
cmd("unset")("CMKR_SOURCES");
792+
endl();
776793
}
777794
}
778795

0 commit comments

Comments
 (0)