vs2010: add explicit objects as 'Object' ItemGroup instead of link dependency

This has two effects:
1. It makes targets with only object files work (test case 88).
2. It adds the object files to the project in the VS IDE.
pull/458/head
Nicolas Schneider 9 years ago
parent d72cc6e6f8
commit 147b7aa356
  1. 7
      mesonbuild/backend/vs2010backend.py

@ -492,9 +492,10 @@ class Vs2010Backend(backends.Backend):
rel_path = self.relpath(lobj.subdir, target.subdir) rel_path = self.relpath(lobj.subdir, target.subdir)
linkname = os.path.join(rel_path, lobj.get_import_filename()) linkname = os.path.join(rel_path, lobj.get_import_filename())
additional_links.append(linkname) additional_links.append(linkname)
additional_objects = []
for o in self.flatten_object_list(target, down, include_dir_names=False): for o in self.flatten_object_list(target, down, include_dir_names=False):
assert(isinstance(o, str)) assert(isinstance(o, str))
additional_links.append(o) additional_objects.append(o)
if len(additional_links) > 0: if len(additional_links) > 0:
additional_links.append('%(AdditionalDependencies)') additional_links.append('%(AdditionalDependencies)')
ET.SubElement(link, 'AdditionalDependencies').text = ';'.join(additional_links) ET.SubElement(link, 'AdditionalDependencies').text = ';'.join(additional_links)
@ -549,13 +550,15 @@ class Vs2010Backend(backends.Backend):
# just the file name instead of the relative path to the file. # just the file name instead of the relative path to the file.
pch_file.text = os.path.split(header)[1] pch_file.text = os.path.split(header)[1]
if len(objects) > 0: if len(objects) + len(additional_objects) > 0:
# Do not add gen_objs to project file. Those are automatically used by MSBuild, because they are part of # Do not add gen_objs to project file. Those are automatically used by MSBuild, because they are part of
# the CustomBuildStep Outputs. # the CustomBuildStep Outputs.
inc_objs = ET.SubElement(root, 'ItemGroup') inc_objs = ET.SubElement(root, 'ItemGroup')
for s in objects: for s in objects:
relpath = s.rel_to_builddir(proj_to_src_root) relpath = s.rel_to_builddir(proj_to_src_root)
ET.SubElement(inc_objs, 'Object', Include=relpath) ET.SubElement(inc_objs, 'Object', Include=relpath)
for s in additional_objects:
ET.SubElement(inc_objs, 'Object', Include=s)
ET.SubElement(root, 'Import', Project='$(VCTargetsPath)\Microsoft.Cpp.targets') ET.SubElement(root, 'Import', Project='$(VCTargetsPath)\Microsoft.Cpp.targets')
# Reference the regen target. # Reference the regen target.
ig = ET.SubElement(root, 'ItemGroup') ig = ET.SubElement(root, 'ItemGroup')

Loading…
Cancel
Save