Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

請問如何使用模板來客製化config.h這類檔案? #271

Closed
orzuk-lmj opened this issue Dec 3, 2018 · 11 comments
Closed

請問如何使用模板來客製化config.h這類檔案? #271

orzuk-lmj opened this issue Dec 3, 2018 · 11 comments

Comments

@orzuk-lmj
Copy link
Contributor

期望的功能如同 cmake 的 configure_file ,使用一個自定義模板然後僅僅變更其中一小部分。

目前查詢到在 xmake 中的 set_config_header 會建立全新的檔案。

理由是盡可能不變更第三方原代碼結構,以方便更新維護,以及符合授權。

@waruqi
Copy link
Member

waruqi commented Dec 3, 2018

这块目前的可定制化程度确实还不是很高,等后面有时间可以参考cmake改进下支持。。增加上模板设置支持。

目前查詢到在 xmake 中的 set_config_header 會建立全新的檔案。

即使采用模板替换,应该也会每次生成一个新文件才对吧。

理由是盡可能不變更第三方原代碼結構,以方便更新維護,以及符合授權。

自动生成的config.h应该仅在编译安装阶段生效,并不会纳入源码结构才对吧。。我自己的库使用都没把它提交到git,目前我也没改变库的源码结构。

@waruqi waruqi added this to the v2.2.4 milestone Dec 3, 2018
@orzuk-lmj
Copy link
Contributor Author

理由是盡可能不變更第三方原代碼結構,以方便更新維護,以及符合授權。

自动生成的config.h应该仅在编译安装阶段生效,并不会纳入源码结构才对吧。。我自己的库使用都没把它提交到git,目前我也没改变库的源码结构。

舉個例子,像是 freetype2的ft2build.hcurl的curlbuild.h 都會需要盡可能保持原來的代碼結構。但卻會因為平台特性不同而需要有所修改,換句話說就是編譯發佈自帶的第三方庫時會需要區分不同平台的設定檔案,以前一直都是用 configure_file 搭配cmake變量來做這些事情。

@waruqi
Copy link
Member

waruqi commented Dec 3, 2018

你说的这个 set_config_header 不也可以么,里面有不同平台的设置来区分,只不过目前提供给用户的自定义化程度不高而已,这块我后面改进下。

@orzuk-lmj
Copy link
Contributor Author

orzuk-lmj commented Dec 3, 2018

抱歉,應該是我用詞造成的誤會。

  • cmake 採用模板替換讓舊的內容得以存留,僅替換部分;xmake則是建立新的內容。但他們確實都會生成新的文件。
  • set_config_header 基本上跟隨著target,然而 configure_file 是全局的可以多目標共用,不會因為disable部分目標而失去作用。
  • configure_file 可以置換部分內容,可以讓代碼內容和原來的維持一致。甚至在部分狀況下可以嵌套執行,以方便不同流程的置換字串。從另一角度來看待,這其實就是個文件內容中的替代字串被置換的過程,無關於*.h代碼,可用在任意文件。

@waruqi
Copy link
Member

waruqi commented Dec 3, 2018

set_config_header 基本上跟隨著target,然而 configure_file 是全局的可以多目標共用,不會因為disable部分目標而失去作用。

这块我反而觉得是xmake的优势,虽然是跟随target,但是你把 set_config_header 设置放到root域,那就是全局设置,影响所有target,也就是多target共用,另外它也可以单独只用于某个target。

configure_file 可以置換部分內容,可以讓代碼內容和原來的維持一致。甚至在部分狀況下可以嵌套執行,以方便不同流程的置換字串。從另一角度來看待,這其實就是個文件內容中的替代字串被置換的過程,無關於*.h代碼,可用在任意文件。

这块的通用性确实没cmake设计的好,因为会追加一些.h特有的defines,后期确实可以参考cmake做的更加通用些。

@waruqi
Copy link
Member

waruqi commented Jan 9, 2019

这块我最近还在设计和构思中,暂时只有一个雏形,但是还有很多细节处理上怎么弄,还没想好,相关设计规划和开发进展见:#320

等之后我设计好整体api后,会开始实现,最近时间不多,进度上会稍慢些,请耐心等待。

@waruqi
Copy link
Member

waruqi commented Feb 3, 2019

这个我已经支持了,你可以执行 xmake update dev更新dev分支版本试试,具体详情见 #320

这里我先close,如果有使用上的问题,可以在 #320 里面反馈。。

@Freed-Wu
Copy link
Member

meson has a API to skip config.h.in to output config.h:

conf_data = configuration_data()
conf_data.set(
  'BIN2C',
  get_option('bin2c'),
  description: 'use bin2c',
)
conf_file = configure_file(output: 'config.h', configuration: conf_data)

Can xmake do same?

@waruqi
Copy link
Member

waruqi commented Sep 12, 2024

@Freed-Wu
Copy link
Member

add_configfiles() need a config.h.in. Can we gneerate config.h without writting a config.h.in?

@waruqi
Copy link
Member

waruqi commented Sep 12, 2024

add_configfiles() need a config.h.in. Can we gneerate config.h without writting a config.h.in?

call io.writefile to generate it in on_load/on_config by yourself.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants