在上一章中<<CMake实战--add_subdiretory >>一文中,我们介绍了当我们工程里有多个编译目标,而且每个编译目标的编译源码都被管理在不同的文件夹下时的情况.这一章,我们主要讨论,当使用CMake编译整个工程时,其编译结果该如何管理.
目标文件
CMake 在编译时, 其编译(build)目录下每个文件夹对应了源码(source)目录相应的文件夹, 一般情况下,每个源码文件夹下都是相应的源码以及有一个CMake编译文件(CMakeLists.txt).而每个CMake编译文件对应了一到多个编译目标(target).
在上一章中我们的例子中,每个CMake编译文件,对应了一个编译目标,在build目录下,生成的编译目标都位于不同的文件夹下.如果,我们想运行某个编译目标,还要到相应的文件夹下, 这样很不方便.一般的做法是生成的编译目标都位于统一的目录下, 如果编译目标的类型是库类型,则位于lib文件夹下, 如果编译目标类型是可执行文件,则位于bin文件夹下. 这是如何做到的呢?
set_target_properties(target PROPERTIES prop1 value1 prop2 value2 ...) --该命令主要是对某个编译目标的属性进行改变, CMake中的属性有很多,这里对目标文件生成路径改变的属性有: RUNTIME_OUTPUT_DIRECTORY,LIBRARY_OUTPUT_DIRECTORY, ARCHIVE_OUTPUT_DIRECTORY.
RUNTIME_OUTPUT_DIRECTORY--指可执行文件输出的路径.
LIBRARY_OUTPUT_DIRECTORY--指库文件的输出路径
因此,我们在工程的根目录下的CMake编译文件里,我们指定编译文件的输出目录:
set(SFML_BUILD_OUTPUT "${CMAKE_BINARY_DIR}"), 即编译的目录下
然后,在每个编译目标目录下的CMake编译文件里,我们制定编译目标的输出属性:
set_target_properties(Target PROPERTIES
ARCHIVE_OUTPUT_DIRECTORY "${SFML_BUILD_OUTPUT}/lib"
LIBRARY_OUTPUT_DIRECTORY "${SFML_BUILD_OUTPUT}/lib"
RUNTIME_OUTPUT_DIRECTORY "${SFML_BUILD_OUTPUT}/bin"
)
这样所有的可执行文件在使用make 命令编译工程后,所有的目标文件就都位于编译目录的bin目录下了.
除了,上面这种方式,还可以通过install命令来安装目标文件到指定目录
intall(TARGETS targets DESTINATION dir)--TARGETS指定了我们安装文件的类型是我们要编译的目标生成文件, DESTINATION 表示我们需要安装到一个指定路径 dir是我们指定的路径
资源文件
有时候,我们的程序中需要使用到一些资源文件,如图片,xml文本等,我们一般会将这些资源文件统一放在工程源码的目录下面. 有时候,我们需要将这些资源文件安装到某个指定目录,以便可执行程序能够获取这些资源文件,我们可以使用install命令:
install(DIRECTORY "path/src/assets" DESTINATION "path/dest/assets")










网友评论