使用CMake管理的C++项目工程你是否有以下需求:
1.项目编译时将生成的文件分类自动输出到指定位置;
2.除了上面输出到指定位置以外,还要拷贝一份到指定位置(包含头文件,配置文件,第三方依赖库文件等);
第2点有两种实现方式,就是在CMakeLists.txt里使用 install() 或者 add_custom_target() 语句编写拷贝的文件及目标路径,它们都可以实现,但是 install() 更适合项目编译生成的动静态库/可执行文件/配置文件/头文件,而 add_custom_target() 适合拷贝一些项目的第三方依赖文件。我个人喜欢用 install() 更方便,下面列子我都使用给你参考。
示例:CMakeLists.txt中节选出来的相关内容
# 设置生成文件输出位置的根目录变量
set(OUT_EXE_PATH ${CMAKE_BINARY_DIR}/bin)
set(OUT_LIB_PATH ${CMAKE_BINARY_DIR}/lib)
# 设置生成目标的属性(编译生成文件的命名后缀、输出位置等的设置)
set_target_properties(${PROJECT_NAME} PROPERTIES
LINKER_LANGUAGE CXX # 连接器使用C++的连接规则
DEBUG_POSTFIX "d" # Debug版本的生成文件名以d结尾
RELEASE_POSTFIX "" # Release版本无后缀
# Windows:(.exe/.dll)文件输出 or Linux:可执行文件输出
RUNTIME_OUTPUT_DIRECTORY ${OUT_EXE_PATH}/other
RUNTIME_OUTPUT_DIRECTORY_DEBUG ${OUT_EXE_PATH}/debug
RUNTIME_OUTPUT_DIRECTORY_RELEASE ${OUT_EXE_PATH}/release
# Linux:(.so)文件输出
LIBRARY_OUTPUT_DIRECTORY ${OUT_LIB_PATH}/other
LIBRARY_OUTPUT_DIRECTORY_DEBUG ${OUT_LIB_PATH}/debug
LIBRARY_OUTPUT_DIRECTORY_RELEASE ${OUT_LIB_PATH}/release
# Windows:(.lib/.a)文件输出
ARCHIVE_OU