Существует инструмент ack
, который будет делать именно то, что вы ищете.
http://linux.die.net/man/1/ack
ack -i search_string folder_path/*
Вы можете игнорировать -i
для поиска с учетом регистра
Предположим, что у вас есть один файл CMakeLists.txt
в каталоге Source
, вы создадите две переменные, используя разные команды file()
file(GLOB Dir1_Sources RELATIVE "Dir1" "*.cpp")
file(GLOB Dir2_Sources RELATIVE "Dir2" "*.cpp")
и добавьте оба набора, сгенерированные командами file()
в исходный список вашей цели:
add_executable(MyProgram ${Dir1_Sources} ${Dir2_Sources})
В качестве альтернативы вы можете поместить файл CMakeLists.txt
в Dir1
и Dir2
(Main) в качестве следует
Source
|
|_ CMakeLists.txt
| > project(MyProgram)
| > cmake_minimum_required(VERSION 3.8)
| > add_subdirectory("Dir1")
| > add_subdirectory("Dir2")
|
|_ Dir1
| |_ CMakeLists.txt
| > file(GLOB Sources "*.cpp")
| > add_library(Dir1 STATIC ${Sources})
|_ Dir2
|_ CMakeLists.txt
> file(GLOB Sources "*.cpp")
> add_executable(MyProgram ${Sources})
> target_link_libraries(MyProgram Dir1)
, чтобы добавить подкаталоги в качестве дополнительных (статических) библиотек, связанных с вашей главной целью.
CMakeLists.txt
на уровнеSource
. Ну, хотя вы могли бы также разместить соответствующиеCMakeLists.txt
файлы в (не основных) подкаталогах для создания библиотек и добавить их с помощьюadd_subdirectory()
, но, как вы упомянули, это не обычный способ просто собрать из источников. – πάντα ῥεῖ 1 September 2014 в 18:41add_executable
должен появиться передtarget_link_libraries
, иначе cmake будет жаловаться. – qed 25 August 2017 в 21:39