cmake:如何迭代目录中的所有源文件并将每个文件构建到可执行文件中
cmake: how to iterate all source files in a directory and build each into an executable?
我有一个cpp文件目录,其中有例如:
a.cpp b.cpp c.cpp xy.cpp ....
每个CPP文件都有一个主函数,因此我希望将每个文件构建到可执行文件中。那么,如何使用cmake查找和循环所有这些源文件并将它们构建?
非常感谢。
我的建议是使函数做到文件的逻辑:
function(add_test_file TEST_NAME TEST_FILE)
add_emecutable(${TEST_NAME} ${TEST_FILE})
target_link_library(${TEST_NAME} PUBLIC test_deps)
endfunction()
然后手动添加每个文件:
add_test_file(a_test a.cpp)
add_test_file(b_test b.cpp)
add_test_file(c_test c.cpp)
add_test_file(xy_test xy.cpp)
这样,当您添加新文件时,它将触发cmake重新运行。
这个问题并不那么受欢迎,尽管值得:)
在Guillaume Racicot的回答之后,我构建了这两个最小功能,这些功能对我来说非常有用。如果您提出我的答案,请考虑在没有我的答案的情况下进行投票!
我将无法写下我的答案!function(add_exe_linked_to_lib TEST_NAME TEST_FILE CLASS_SET)
add_executable(${TEST_NAME} ${TEST_FILE})
target_link_libraries(${TEST_NAME} PUBLIC ${CLASS_SET})
endfunction()
function(add_test_linked_to_lib TEST_NAME TEST_FILE CLASS_SET)
add_exe_linked_to_lib(${TEST_NAME} ${TEST_FILE} ${CLASS_SET})
add_test(NAME ${TEST_NAME} COMMAND ${TEST_NAME})
endfunction()
cmake文件看起来像:
function(add_exe_linked_to_lib TEST_NAME TEST_FILE CLASS_SET)
add_executable(${TEST_NAME} ${TEST_FILE})
target_link_libraries(${TEST_NAME} PUBLIC ${CLASS_SET})
endfunction()
function(add_test_linked_to_lib TEST_NAME TEST_FILE CLASS_SET)
add_exe_linked_to_lib(${TEST_NAME} ${TEST_FILE} ${CLASS_SET})
add_test(NAME ${TEST_NAME} COMMAND ${TEST_NAME})
endfunction()
cmake_minimum_required(VERSION 3.1)
set(CMAKE_CXX_STANDARD 11)
project("SUM-UP-TESTING")
#libraries
add_library(My_Class STATIC My_Class.cpp)
add_library(Another_Lib STATIC My_Class.cpp)
set(MY_LIBS My_Class Another_Lib)
#compile options
add_compile_options(-D DEBUG)
#main
add_exe_linked_to_lib(MAIN-TESTING main.cpp ${MY_LIBS})
# TEST
enable_testing()
add_test_linked_to_lib(Test_In_Code tests/testing1.cpp ${MY_LIBS})
相关文章:
- 如何将不同的可执行文件合并到一个窗口框架中进行编码?像浏览器一样
- 如何使 windows 命令提示符在C++可执行文件上显示返回值?
- CMake:如何将库 A 链接到库 B,然后将可执行文件链接到库 A
- 如何使字符串出现在编译的二进制可执行文件的开头?
- 程序在使用 system() 启动另一个可执行文件时停止
- 如何更改使用 CPack 安装的可执行文件的名称?
- 在Linux上使用Clang / OLLVM交叉编译helloworld Windows可执行文件时的问题
- CMake:我们可以为一组不形成可执行文件或库的特定文件指定包含目录吗?
- 如何将图像传入C++可执行文件并将输出图像存储在新目录中?
- 共享库 (.so) 没有扩展名的 Linux 可执行文件之间的区别?
- 如何在 linux 可执行文件中使用静态库
- 错误:当我从"WinDbg"打开可执行文件时,找不到符号文件。默认导出 ntdll 的符号.dll
- 编译的C可执行文件被Windows defender检测为病毒
- Linux 可执行文件通过 dlopen 在emplace_back崩溃打开共享库
- 是否可以在命令行中将输入参数传递给可执行文件
- 如何在可执行文件中存储常量数组?
- 如果包含映射的静态库与可执行文件和动态库链接,静态映射(变量)是否会被多次释放?
- Linux 可执行文件中列出的源文件
- cmake:如何迭代目录中的所有源文件并将每个文件构建到可执行文件中
- 对于相同的C 源文件,其GCC可执行文件在Windows中比Linux大的655倍.为什么这么大的差异