关于CMake中configure_file生成文件路径及target_sources写法的疑问
CMake configure_file 生成文件路径与 target_sources 路径指定问题解答
1. 生成的print_info.cpp文件位于何处?
configure_file 默认会将生成的文件输出到 ${CMAKE_CURRENT_BINARY_DIR} 目录下。这个变量指向的是当前处理的CMakeLists.txt对应的构建目录,而非你的源码目录(也就是main.cpp所在的目录)。
举个实际场景:如果你的源码放在 ~/my_project/src 下,而你在 ~/my_project/build 目录执行CMake配置,那么针对 src 目录里的CMakeLists.txt,${CMAKE_CURRENT_BINARY_DIR} 就是 ~/my_project/build/src,生成的print_info.cpp就会存放在这个路径下。
2. 为何在target_sources中要指定${CMAKE_CURRENT_BINARY_DIR}/print_info.cpp?
这是因为 configure_file 遵循CMake推荐的源码树与构建树分离原则,默认不会把生成文件放到源码目录里——这么做是为了避免自动生成的临时文件污染你的原始代码仓库。
如果不指定 ${CMAKE_CURRENT_BINARY_DIR} 路径,CMake会默认去当前源码目录(${CMAKE_CURRENT_SOURCE_DIR})查找print_info.cpp,但这个文件根本不存在于源码目录,直接会触发文件找不到的错误。所以必须明确指定生成文件所在的构建目录路径,才能让CMake正确定位到这个自动生成的源文件。
内容的提问来源于stack exchange,提问作者Shellong
相关产品推荐
相关产品推荐

