summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGELOG.md8
-rw-r--r--xmake/plugins/project/cmake/cmakelists.lua27
2 files changed, 35 insertions, 0 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 893d73044..e7e35f65a 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,10 @@
## master (unreleased)
+### Change
+
+* [#997](https://github.com/xmake-io/xmake/issues/997): Support to set std lanuages for `xmake project -k cmake`
+
## v2.3.8
### New features
@@ -842,6 +846,10 @@
## master (开发中)
+### 改进
+
+* [#997](https://github.com/xmake-io/xmake/issues/997): `xmake project -k cmake` 插件增加对 `set_languages` 的支持
+
## v2.3.8
### 新特性
diff --git a/xmake/plugins/project/cmake/cmakelists.lua b/xmake/plugins/project/cmake/cmakelists.lua
index d669f0162..fe8a66871 100644
--- a/xmake/plugins/project/cmake/cmakelists.lua
+++ b/xmake/plugins/project/cmake/cmakelists.lua
@@ -302,6 +302,30 @@ function _add_target_warnings(cmakelists, target)
end
end
+-- add target languages
+function _add_target_languages(cmakelists, target)
+ local features =
+ {
+ c89 = "c_std_90"
+ , c99 = "c_std_99"
+ , c11 = "c_std_11"
+ , cxx98 = "cxx_std_98"
+ , cxx11 = "cxx_std_11"
+ , cxx14 = "cxx_std_14"
+ , cxx17 = "cxx_std_17"
+ , cxx20 = "cxx_std_20"
+ }
+ local languages = target:get("languages")
+ if languages then
+ for _, lang in ipairs(languages) do
+ local feature = features[lang] or (features[lang:replace("++", "xx")])
+ if feature then
+ cmakelists:print("target_compile_features(%s PRIVATE %s)", target:name(), feature)
+ end
+ end
+ end
+end
+
-- add target optimization
function _add_target_optimization(cmakelists, target)
local flags_gcc =
@@ -458,6 +482,9 @@ function _add_target(cmakelists, target)
-- add target warnings
_add_target_warnings(cmakelists, target)
+ -- add target languages
+ _add_target_languages(cmakelists, target)
+
-- add target optimization
_add_target_optimization(cmakelists, target)