子目录含独立CMakeLists.txt时,应在哪定义可执行目标?
解决方案
调整目标CMakeLists.txt文件
你需要修改src/data_generation/CMakeLists.txt,该文件负责处理data_generation子目录的编译逻辑,修改后生成的可执行文件会自动放在build/data_generation目录下,正好匹配你期望的运行路径。
修改内容
根据你的实际需求,分两种场景处理:
场景1:仅生成可执行文件(无需将data_generation作为库)
将原文件内容替换为:
# 指定源文件生成可执行文件 add_executable(main_data_generation main_data_generation.cc) # 设置头文件搜索路径,确保能找到include目录下的头文件 target_include_directories(main_data_generation PUBLIC include)
场景2:保留data_generation库(供其他模块依赖)
如果后续有其他代码需要调用data_generation模块的功能,需将带main函数的文件从库中排除,单独生成可执行文件:
# 收集所有.cc文件,排除main_data_generation.cc file(GLOB data_generation_SRC "*.cc") list(REMOVE_ITEM data_generation_SRC "main_data_generation.cc") # 生成data_generation静态库 add_library(data_generation ${data_generation_SRC}) target_include_directories(data_generation PUBLIC include) # 生成可执行文件,并链接data_generation库 add_executable(main_data_generation main_data_generation.cc) target_link_libraries(main_data_generation PRIVATE data_generation)
编译运行
修改完成后,在build目录下执行编译命令:
cmake --build .
编译成功后,即可通过以下命令运行可执行文件:
./build/data_generation/main_data_generation
内容的提问来源于stack exchange,提问作者Paolo
相关产品推荐
相关产品推荐

