diff --git a/include/project_parser.hpp b/include/project_parser.hpp index 0396557..f545bd6 100644 --- a/include/project_parser.hpp +++ b/include/project_parser.hpp @@ -105,6 +105,8 @@ struct Target { ConditionVector precompile_headers; ConditionVector private_precompile_headers; + ConditionVector dependencies; + std::string condition; std::string alias; Condition> properties; diff --git a/src/cmake_generator.cpp b/src/cmake_generator.cpp index 65783d8..6aa2138 100644 --- a/src/cmake_generator.cpp +++ b/src/cmake_generator.cpp @@ -1416,7 +1416,7 @@ void generate_cmake(const char *path, const parser::Project *parent_project) { }); }; - auto link_libraries = [&](const parser::ConditionVector &cargs, const std::string &scope) { + auto link_cmd = [&](const char *command, const parser::ConditionVector &cargs, const std::string &scope) { gen.handle_condition(cargs, [&](const std::string &, const std::vector &args) { std::vector targs; for (const std::string &arg : args) { @@ -1432,7 +1432,7 @@ void generate_cmake(const char *path, const parser::Project *parent_project) { targs.push_back(arg); } } - cmd("target_link_libraries")(target.name, scope, targs); + cmd(command)(target.name, scope, targs); }); }; @@ -1452,14 +1452,16 @@ void generate_cmake(const char *path, const parser::Project *parent_project) { target_cmd("target_link_directories", t.link_directories, target_scope); target_cmd("target_link_directories", t.private_link_directories, "PRIVATE"); - link_libraries(t.link_libraries, target_scope); - link_libraries(t.private_link_libraries, "PRIVATE"); + link_cmd("target_link_libraries", t.link_libraries, target_scope); + link_cmd("target_link_libraries", t.private_link_libraries, "PRIVATE"); target_cmd("target_link_options", t.link_options, target_scope); target_cmd("target_link_options", t.private_link_options, "PRIVATE"); target_cmd("target_precompile_headers", t.precompile_headers, target_scope); target_cmd("target_precompile_headers", t.private_precompile_headers, "PRIVATE"); + + link_cmd("add_dependencies", t.dependencies, ""); }; if (tmplate != nullptr) { diff --git a/src/project_parser.cpp b/src/project_parser.cpp index 806845f..9e57444 100644 --- a/src/project_parser.cpp +++ b/src/project_parser.cpp @@ -690,6 +690,8 @@ Project::Project(const Project *parent, const std::string &path, bool build) : p t.optional("precompile-headers", target.precompile_headers); t.optional("private-precompile-headers", target.private_precompile_headers); + t.optional("dependencies", target.dependencies); + Condition msvc_runtime; t.optional("msvc-runtime", msvc_runtime); for (const auto &cond_itr : msvc_runtime) {