So, having just done a tiny bit of testing, I think you can use a DESCRIPTION file in your project, and then "install" your project using devtools::install().
E.g. I added a DESCRIPTION file to a project, adding a package I knew I didn't have installed to the DESCRIPTION and called devtools::install() on it. The missing dependency got installed along with "installing" the project.
However, I'm not sure this is a good idea (I suspect it's not), as my project isn't actually a package, and in the long run this might cause me some problems. The first one I can think of is that this will potentially overwrite already installed packages if you call for specific versions of a package to run your project with.
If you're trying to capture the dependencies of a particular project you might get some value from looking at renv, the new dependency management system that RStudio have put/are putting together: https://rstudio.github.io/renv/index.html (just on GitHub for now, but I think a CRAN release is imminent looking at their NEWS file).