如何运送或导出在代码块中生成的sdl项目

时间:2016-08-13 07:32:48

标签: c++11 sdl codeblocks

项目使用外部图像文件,并且配置代码块以查找SDL的库和头文件。如何将项目转换为可以轻松发送的格式?我打算创建一个可移植的单个可执行文件或安装程序。 我怎么能这样做?

1 个答案:

答案 0 :(得分:0)

我已经做过很多次了。

你只需要把必要的DLL(我使用SDL 1.2,所以SDL.dllSDL_image.dllzlib.dll,...)放在可执行文件的位置,这可能不是这样的适用于codeblocks / VC ++树和Debug/bin& Release/bin目录,但可以使用可以运行可执行文件的.bat文件。

OR

请考虑您的开发项目不是用户将看到的项目。

您是否认为Microsoft员工将所有system32命令编码在一个源目录中?

然后开发你想要的,然后创建一个交付脚本,将所有内容放在根目录中。就像你在开发和反转时没有交付产品的限制一样。

我推荐这种方法。

结帐My bagman SDL remake看看我的意思

当我创建用于分发的存档时,我使用我在此处包含的自定义脚本。这个有所有的工作,libmpeg用于mp3解压缩,以及所有。如果您解压缩Bagman archive,它可以立即在Windows PC上运行。

这是我的目录树

Bagman\bin
Bagman\exploit
Bagman\icons
Bagman\music
Bagman\obj
Bagman\resource
Bagman\sound
Bagman\src
Bagman\work
Bagman\bin\Debug
Bagman\bin\Debug256
Bagman\bin\Release
Bagman\exploit\mkf
Bagman\obj\Amiga
Bagman\obj\Debug
Bagman\obj\Debug256
Bagman\obj\NDS
Bagman\obj\NDSEMU
Bagman\obj\Release
Bagman\obj\Debug\src
Bagman\obj\Debug\src\characters
Bagman\obj\Debug\src\engine
Bagman\obj\Debug\src\gfx
Bagman\obj\Debug\src\screens
Bagman\obj\Debug\src\sys
Bagman\obj\Debug256\src
Bagman\obj\Debug256\src\characters
Bagman\obj\Debug256\src\engine
Bagman\obj\Debug256\src\gfx
Bagman\obj\Debug256\src\sys
Bagman\obj\NDS\src
Bagman\obj\NDS\src\characters
Bagman\obj\NDS\src\engine
Bagman\obj\NDS\src\gfx
Bagman\obj\NDS\src\sys
Bagman\obj\NDSEMU\src
Bagman\obj\NDSEMU\src\characters
Bagman\obj\NDSEMU\src\engine
Bagman\obj\NDSEMU\src\gfx
Bagman\obj\NDSEMU\src\sys
Bagman\obj\Release\src
Bagman\obj\Release\src\characters
Bagman\obj\Release\src\engine
Bagman\obj\Release\src\gfx
Bagman\obj\Release\src\sys
Bagman\resource\1x
Bagman\resource\maps
Bagman\resource\1x\images
Bagman\resource\1x\sprites
Bagman\src\characters
Bagman\src\engine
Bagman\src\gfx
Bagman\src\screens
Bagman\src\sys

以下是复制用户归档中所有必要文件的python脚本:

import sys,os,zipfile,re,shutil,glob
import find,which  # custom modules I created myself


MODULE_FILE = sys.modules[__name__].__file__
PROGRAM_DIR = os.path.abspath(os.path.dirname(MODULE_FILE))
ROOTDIR=os.path.realpath(os.path.join(PROGRAM_DIR,os.pardir))

PRODUCT_NAME="Bagman"

music=False
dev=False

version = "1.2"

print("making archive for version "+version)

os.chdir(ROOTDIR)
archname=PRODUCT_NAME+"-win32-"+version+".zip"

zfn = os.path.join(ROOTDIR,os.pardir,archname)
if os.path.exists(zfn):
    os.remove(zfn)

zf = zipfile.ZipFile(zfn,mode="w",compression=zipfile.ZIP_DEFLATED)

dll_list = ["SDL.dll","SDL_Mixer.dll"]+["smpeg.dll","libgcc_s_sjlj-1.dll","libstdc++-6.dll","libgcc_s_dw2-1.dll"]  # MP3 playing needs the second part

items_list = ["bagman*.bat","*.cbp","*.dev","*.txt","COPYING","resource","exploit","sound","src"]

real_items_list = []
for i in items_list:
    real_items_list.extend(glob.glob(i))

for d in dll_list:
    print("processing '"+d+"'")
    dp = which.which(d)
    if len(dp)==0:
        raise Exception("%s not found in PATH" % d)
    zf.write(dp[0],arcname=PRODUCT_NAME+"/"+d)

for i in real_items_list:
    print("processing '"+i+"'")
    if os.path.isfile(i):
        zf.write(i,arcname=PRODUCT_NAME+"/"+i)
    else:
        fnd = find.Find()
        items = fnd.init(i)
        for f in items:
            if i == "resource" and os.path.basename(f) in ["settings","soundbank.bin"]:
                pass
            else:
                fi = f.replace(os.sep,"/")[2:]
                if os.path.isfile(fi):
                    if fi.endswith("~"):
                        pass
                    else:
                        zf.write(fi,arcname=PRODUCT_NAME+"/"+fi)
                else:
                    zfi = zipfile.ZipInfo(PRODUCT_NAME+"/"+fi+"/")
                    zf.writestr(zfi, '')

zfi = zipfile.ZipInfo(PRODUCT_NAME+"/bin/")
zf.writestr(zfi, '')
zfi = zipfile.ZipInfo(PRODUCT_NAME+"/bin/Release/")
zf.writestr(zfi, '')
zfi = zipfile.ZipInfo(PRODUCT_NAME+"/bin/Debug/")
zf.writestr(zfi, '')
zf.write("bin/Release/bagman.exe",arcname=PRODUCT_NAME+"/bin/Release/bagman.exe")

zf.close()

我知道现有的python模块可以帮助你实现这些目标(distutils)。我没有使用它们,因为我不知道它们。