These are given as inductive/projective limit topologies. I assume that $C_0^\infty$ means compactly supported and replace it by $C_c^\infty$. You only have to topologize the space $C^k(X)$ (k-times differentiable functions). E.g., for subsets of the real line the norm is given by: $$ ||f||_k = ||f||_\infty + || f' ||_\infty + \dots + || f^{(k)} ||_\infty.$$ IfFor a general definition, you will have to use a smooth partition of unity and the atlases.
If you know, how you topolgize inductive and projective limits, e.g. via an universal mapping property, then the following definition giveswill give you the topology:
For $X$, define as projective limit $$ C^\infty(X) = \cap_{k=1}^\infty \; C^k(X),$$ then the dual is an inductive limit $$ C^\infty(X)' = \cup_{k=1}^\infty C^k(X)'.$$ So in particular, the $C^\infty(X)$ space is metrizable as countable limit of metrizable spaces, if you can find a countable smooth partition of unity. TheAlso the space $C^\infty(X)'$ is metrizable, if and only if $C(X)'$ is metrizable, if and only if $X$ is second-countable, if and only if there is countable smooth partition of unity.
For non-compact $X$, choose a collection $(K_i)_{i \in I}$ of compact subsets $K_i$ of $X$ such that $X =\cup_{i \in I} K_i$. One efines as inductive limit $$ C_c^\infty(X) = \lim_{J \subset I \; finite}^{\rightarrow}\cap_{k} C^k(\cup_{i \in J} K_i).$$ For the dual, the limits switch $$ C_c^\infty(X)' =\lim_{J \subset I \; finite}^{\leftarrow} \cup_{k} C^k(\cup_{i \in J} K_i)'.$$