[MSC v.1500 64 bit (AMD64)]的な出力

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 (等)とリンクもしなければならない。けれど、たとえば「テンポラリな実行ファイルを作って実行し、用が済んだらさようなら」で良いなら…:

puts_compiler.py
 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」が取り込めてしまえば、同じ開発環境でビルドする何か別のプログラムのためには、単にどこかファイルにでも書き込みゃいいね。