summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2020-10-20 00:36:32 +0800
committerruki <[email protected]>2020-10-20 00:36:32 +0800
commitfe0e074ff21fee5dd16e66c3b52a389cea8b08e4 (patch)
tree448e475494aa72aa251648b9fdcce390e3929197
parent965bccf5adee7a4a1c0e55b7c39d5637a3e95c15 (diff)
support set_languages for cmakelists
-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)