Skip to content

Instantly share code, notes, and snippets.

@cmpute
Created May 11, 2017 12:58
Show Gist options
  • Save cmpute/e9e9f2a676fd34a42b1127beab7512be to your computer and use it in GitHub Desktop.
Save cmpute/e9e9f2a676fd34a42b1127beab7512be to your computer and use it in GitHub Desktop.
Generate VC++ Properties file (.prop) for PCL projects
import os
import os.path as op
# Paths can be user-defined
pcl_dir = os.environ["PCL_ROOT"]
pcl_ver = pcl_dir.split(' ')[-1]
vctool_ver = list(filter(lambda part: part.startswith('vc'),
os.listdir(op.join(pcl_dir, '3rdParty', 'Boost', 'lib'))[0].split('-')))[0] #vc140
openni_dir = op.sep.join(os.environ['OPENNI2_LIB64'].split(op.sep)[:-2])
template = '''
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ImportGroup Label="PropertySheets"/>
<!-- User Macros -->
<PropertyGroup Label="UserMacros">
<PCL_ROOT Condition="'$(Platform)'=='Win32'">{pcl_dir}</PCL_ROOT>
<PCL_ROOT Condition="'$(Platform)'=='x64'">{pcl_dir}</PCL_ROOT>
</PropertyGroup>
<!-- Debug|Win32 -->
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<AdditionalIncludeDirectories>$(PCL_ROOT)\\include\\{pcl_ver_dir};$(PCL_ROOT)\\3rdParty\\Boost\\include\\{boost_ver_dir};$(PCL_ROOT)\\3rdParty\\Eigen\\eigen3;$(PCL_ROOT)\\3rdParty\\FLANN\\include;$(PCL_ROOT)\\3rdParty\\QHull\\include;$(PCL_ROOT)\\3rdParty\\VTK\\include\\vtk-7.0;{openni_dir_include};%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<SDLCheck>false</SDLCheck>
<PreprocessorDefinitions>_WIN32_WINNT=0x0A00;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<Link>
<AdditionalLibraryDirectories>$(PCL_ROOT)\\lib;$(PCL_ROOT)\\3rdParty\\Boost\\lib;$(PCL_ROOT)\\3rdParty\\FLANN\\lib;$(PCL_ROOT)\\3rdParty\\QHull\\lib;$(PCL_ROOT)\\3rdParty\\VTK\\lib;{openni_dir_lib};%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalDependencies Condition="'$(PlatformToolset)'=='{vctool_ver}'">{debug_libs}%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
<!-- Release|Win32 -->
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<AdditionalIncludeDirectories>$(PCL_ROOT)\\include\\{pcl_ver_dir};$(PCL_ROOT)\\3rdParty\\Boost\\include\\{boost_ver_dir};$(PCL_ROOT)\\3rdParty\\Eigen\\eigen3;$(PCL_ROOT)\\3rdParty\\FLANN\\include;$(PCL_ROOT)\\3rdParty\\QHull\\include;$(PCL_ROOT)\\3rdParty\\VTK\\include\\vtk-7.0;{openni_dir_include};%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<SDLCheck>false</SDLCheck>
<PreprocessorDefinitions>_WIN32_WINNT=0x0A00;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<Link>
<AdditionalLibraryDirectories>$(PCL_ROOT)\\lib;$(PCL_ROOT)\\3rdParty\\Boost\\lib;$(PCL_ROOT)\\3rdParty\\FLANN\\lib;$(PCL_ROOT)\\3rdParty\\QHull\\lib;$(PCL_ROOT)\\3rdParty\\VTK\\lib;{openni_dir_lib};%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalDependencies Condition="'$(PlatformToolset)'=='{vctool_ver}'">{release_libs}%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
<!-- Debug|x64 -->
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<AdditionalIncludeDirectories>$(PCL_ROOT)\\include\\{pcl_ver_dir};$(PCL_ROOT)\\3rdParty\\Boost\\include\\{boost_ver_dir};$(PCL_ROOT)\\3rdParty\\Eigen\\eigen3;$(PCL_ROOT)\\3rdParty\\FLANN\\include;$(PCL_ROOT)\\3rdParty\\QHull\\include;$(PCL_ROOT)\\3rdParty\\VTK\\include\\vtk-7.0;{openni_dir_include};%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<SDLCheck>false</SDLCheck>
<PreprocessorDefinitions>_WIN32_WINNT=0x0A00;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<Link>
<AdditionalLibraryDirectories>$(PCL_ROOT)\\lib;$(PCL_ROOT)\\3rdParty\\Boost\\lib;$(PCL_ROOT)\\3rdParty\\FLANN\\lib;$(PCL_ROOT)\\3rdParty\\QHull\\lib;$(PCL_ROOT)\\3rdParty\\VTK\\lib;{openni_dir_lib};%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalDependencies Condition="'$(PlatformToolset)'=='{vctool_ver}'">{debug_libs}%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
<!-- Release|x64 -->
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<AdditionalIncludeDirectories>$(PCL_ROOT)\\include\\{pcl_ver_dir};$(PCL_ROOT)\\3rdParty\\Boost\\include\\{boost_ver_dir};$(PCL_ROOT)\\3rdParty\\Eigen\\eigen3;$(PCL_ROOT)\\3rdParty\\FLANN\\include;$(PCL_ROOT)\\3rdParty\\QHull\\include;$(PCL_ROOT)\\3rdParty\\VTK\\include\\vtk-7.0;{openni_dir_include};%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<SDLCheck>false</SDLCheck>
<PreprocessorDefinitions>_WIN32_WINNT=0x0A00;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<Link>
<AdditionalLibraryDirectories>$(PCL_ROOT)\\lib;$(PCL_ROOT)\\3rdParty\\Boost\\lib;$(PCL_ROOT)\\3rdParty\\FLANN\\lib;$(PCL_ROOT)\\3rdParty\\QHull\\lib;$(PCL_ROOT)\\3rdParty\\VTK\\lib;{openni_dir_lib};%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalDependencies Condition="'$(PlatformToolset)'=='{vctool_ver}'">{release_libs}%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
</Project>
'''
common = ['opengl32.lib', 'OpenNI2.lib']
debug_libs = list(common)
release_libs = list(common)
def find_libs(path, has_gd=False):
for name in os.listdir(path):
if op.isfile(op.join(path, name)) and name.endswith('.lib'):
if name.endswith('_debug.lib') or name.find('-gd') > 0 or name.find('_d') > 0:
debug_libs.append(name)
elif name.endswith('_release.lib') or has_gd:
release_libs.append(name)
else:
debug_libs.append(name)
release_libs.append(name)
find_libs(op.join(pcl_dir, 'lib'))
find_libs(op.join(pcl_dir, '3rdParty', 'Boost', 'lib'), True)
find_libs(op.join(pcl_dir, '3rdParty', 'FLANN', 'lib'), True)
find_libs(op.join(pcl_dir, '3rdParty', 'Qhull', 'lib'), True)
find_libs(op.join(pcl_dir, '3rdParty', 'VTK', 'lib'), True)
with open('pcl.props','w') as f:
f.write(template.format(
pcl_dir=pcl_dir,
pcl_ver_dir='pcl-' + pcl_dir.split(' ')[-1][:-2],
boost_ver_dir=os.listdir(op.join(pcl_dir, '3rdParty', 'Boost', 'include'))[0],
debug_libs=';'.join(debug_libs),
release_libs=';'.join(release_libs),
vctool_ver=vctool_ver,
openni_dir_include=op.join(openni_dir, 'Include'),
openni_dir_lib=op.join(openni_dir, 'Lib')
))
print("finished")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment