gpt4 book ai didi

c++ - 在 CMake 中添加多个可执行文件

转载 作者:IT老高 更新时间:2023-10-28 11:08:05 25 4
gpt4 key购买 nike

我在一个 C++ 项目中的代码组织如下

  • 我有几个 .cpp.h 文件,其中包含我的类
  • 我有几个 .cxx 文件必须针对 .cpp 文件和一些外部库进行编译。

现在,每个 .cxx 文件都有一个 main() 方法,所以我需要为每个同名的文件添加一个不同的可执行文件文件。

此外,这些 .cxx 文件可能不会链接到相同的外部库。

我想在 CMake 中编写这个构建,我是一个新手,我该怎么做?

最佳答案

我的建议是分两个阶段解决这个问题:

  1. .cpp.h 文件构建一个库,使用 add_library
  2. 遍历所有 .cxx 文件,并使用 add_executable 从每个文件创建一个可执行文件和 foreach

构建库

这可能很简单

file( GLOB LIB_SOURCES lib/*.cpp )
file( GLOB LIB_HEADERS lib/*.h )
add_library( YourLib ${LIB_SOURCES} ${LIB_HEADERS} )

构建所有可执行文件

只需遍历所有 .cpp 文件并创建单独的可执行文件。

# If necessary, use the RELATIVE flag, otherwise each source file may be listed 
# with full pathname. RELATIVE may makes it easier to extract an executable name
# automatically.
# file( GLOB APP_SOURCES RELATIVE app/*.cxx )
file( GLOB APP_SOURCES app/*.cxx )
foreach( testsourcefile ${APP_SOURCES} )
# I used a simple string replace, to cut off .cpp.
string( REPLACE ".cpp" "" testname ${testsourcefile} )
add_executable( ${testname} ${testsourcefile} )
# Make sure YourLib is linked to each app
target_link_libraries( ${testname} YourLib )
endforeach( testsourcefile ${APP_SOURCES} )

一些警告:

  • file(GLOB) 通常不推荐使用,因为如果添加新文件,CMake 不会自动重建。我在这里使用它,因为我不知道你的源文件。
  • 在某些情况下,可以使用完整路径名找到源文件。如有必要,请使用 RELATIVE flag for file(GLOB ...) .
  • 手动设置源文件需要更改 CMakeLists.txt,这会触发重建。见 this question寻找通配符的(缺点)优势。
  • 我使用 string(REPLACE ...) 生成了测试名称。我本可以使用 get_filename_component带有 NAME_WE 标志。

关于“一般”CMake 信息,我建议您阅读一些已在 stackoverflow 上提出的广泛的“CMake 概述”问题。例如:

关于c++ - 在 CMake 中添加多个可执行文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14306642/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com