Python を対話モードで起動すると出るこれ:
Python 2.7.9 (default, Dec 10 2014, 12:28:03) [MSC v.1500 64 bit (AMD64)] on win32
Type “help”, “copyright”, “credits” or “license” for more information.
の
[MSC v.1500 64 bit (AMD64)]
を、「自分の C++ でも出したい」とする。あるいはバイナリの名前に使いたい。
Python 環境に依存することを厭わず、かつ、Python (「や、Python C 拡張モジュール」)「を」ビルドする環境と同じであることを受け容れる限りは、「pyconfig.h」を使える。インクルードするだけでべったり Python 依存となり、python27.lib (等)とリンクもしなければならない。けれど、たとえば「テンポラリな実行ファイルを作って実行し、用が済んだらさようなら」で良いなら…:
1 # -*- coding: utf-8 -*-
2 import sys
3 import os
4 from distutils import log
5 from distutils import ccompiler
6 from distutils import sysconfig
7 from distutils.dir_util import mkpath, remove_tree
8 # -------------------------------------------------------------
9 tmpdir = ".tmp"
10 if not os.path.exists(tmpdir):
11 mkpath(tmpdir)
12 #log.set_verbosity(1) # INFO
13 cc = ccompiler.new_compiler()
14 sysconfig.customize_compiler(cc)
15 cc.set_include_dirs([sysconfig.get_python_inc(plat_specific=1)])
16 cc.set_library_dirs([
17 os.path.join(sys.prefix, "libs"), # for windows
18 ])
19 src = os.path.join(tmpdir, "z.c")
20 open(src, "w").write("""
21 #include <stdio.h>
22 #include <pyconfig.h>
23 int main()
24 {
25 printf("%s", COMPILER);
26 }
27 """)
28 objs = cc.compile([src])
29 cc.link_executable(objs, "z", tmpdir)
30 # -------------------------------------------------------------
31 from subprocess import Popen, PIPE
32 COMPILER = Popen([".tmp/z"], stdout=PIPE).communicate()[0]
33 print(COMPILER)
こんな感じ。まぁ GNU autotools の configure はこんなことばかりを延々やっとるわけだね。
「COMPILER」が取り込めてしまえば、同じ開発環境でビルドする何か別のプログラムのためには、単にどこかファイルにでも書き込みゃいいね。