To solve this optimization problem, we first need to define the decision variables and the objective function. Let's denote:

- $x$ as the number of units of ice cream produced.
- $y$ as the number of units of cheese produced.

The objective is to maximize profits. Given that the profit per unit of ice cream is $2.5 and the profit per unit of cheese is $4, the total profit can be represented by the equation:

\[ \text{Total Profit} = 2.5x + 4y \]

We have several constraints based on the problem description:
1. The ice cream team has a maximum daily production of 50 units of ice cream: \( x \leq 50 \).
2. The cheese team has a maximum daily production of 80 units of cheese: \( y \leq 80 \).
3. The shared processing machine can process at most 100 units of total items per day: \( x + y \leq 100 \).

Additionally, it's implied that both $x$ and $y$ should be non-negative since they represent quantities of products.

Now, let's translate this into Gurobi code in Python:

```python
from gurobipy import *

# Create a new model
m = Model("Ice Cream and Cheese Production")

# Define the decision variables
x = m.addVar(name="ice_cream_units", lb=0)  # Units of ice cream
y = m.addVar(name="cheese_units", lb=0)     # Units of cheese

# Objective function: Maximize profits
m.setObjective(2.5*x + 4*y, GRB.MAXIMIZE)

# Constraints
m.addConstr(x <= 50, name="ice_cream_max_production")
m.addConstr(y <= 80, name="cheese_max_production")
m.addConstr(x + y <= 100, name="processing_machine_capacity")

# Optimize the model
m.optimize()

# Print the results
if m.status == GRB.OPTIMAL:
    print(f"Optimal solution found: Produce {x.x} units of ice cream and {y.x} units of cheese.")
else:
    print("No optimal solution found. The problem might be infeasible.")

```