c语言多子文件结构,如何为具有多个子目录的大项目编写“CMakeLists.txt”?

Do I need only one CMakeLists.txt at root directory or every directory needs a different CMakeLists.txt file?

您通常会在树的每个级别都有一个有意义的区域

例如:

root/

+--- CMakeLists.txt // your root CMakeLists

+--- foo/

| +--- CMakeLists.txt // foo component's CMakeLists

| +--- foo.c

| +--- tests/

| +--- CMakeLists.txt // foo test's CMakeLists

| +--- foo_tests.c

+--- bar/

+--- CMakeLists.txt // bar component's CMakeLists

+--- bar.c

+--- bar_impl/ // no CMakeLists for this dir,it is part of bar

| +--- bar_impl.c

+--- tests/

+--- CMakeLists.txt // bar test's CMakeLists

+--- bar_tests.c

项目根CMakeLists.txt:

在项目根目录CMakeLists.txt中,指定最小cmake要求,项目名称,并包含其中包含各种组件的子目录

根/的CMakeLists.txt:

cmake_minimum_required (VERSION 3.5)

project (my_project C)

add_subdirectory(foo)

add_subdirectory(bar)

组件CMakeLists.txt:

然后在每个组件子目录中,您有另一个CMakeLists.txt文件,您可以在其中添加库,可执行文件等

根/富/的CMakeLists.txt:

add_library(foo foo.c)

target_include_directories(foo PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})

add_subdirectory(tests)

根/富/测试/的CMakeLists.txt:

add_executable(foo_test foo_tests.c)

target_link_libraries(foo_test foo)

您可以按照此结构进行条形图等…

根/富/的CMakeLists.txt:

add_library(bar

bar.c

bar_impl/bar_impl.c)

target_include_directories(bar PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})

target_link_libraries(bar foo)

add_subdirectory(tests)

根/酒吧/测试/的CMakeLists.txt:

add_executable(bar_test bar_tests.c)

target_link_libraries(bar_test bar)

要引导构建,请将cmake指向root / CMakeLists.txt

cd root

mkdir build

cd build

cmake ..

(或使用ide的构建管理器生成其构建配置)

进一步阅读

有关我在此处使用的各种功能的详细信息,请参阅文档:

最后,回答你的第二个问题:

How to add the source files recursively in CMakeLists.txt?

不建议这样做(有关详细信息,请参阅this discussion).

最好明确列出要包含在目标中的每个文件.

请注意,如果源文件位于多个单独的目录中,但它们都属于同一逻辑目标,则每个目录不需要CMakeLists.txt文件 – 只需列出文件名中的子目录

例:

foo/

+--- foo.c

+--- bar.c

+--- baz/

+--- baz.c

+--- bang.c

如果您想要所有上述文件的单个目标foo,您可以按如下方式创建它:

add_library(foo

foo.c

bar.c

baz/baz.c

baz/bang.c)

或者,如果您真的想使用变量来存储SRCS列表

set(SRCS

foo.c

bar.c

baz/baz.c

baz/bang.c)

add_library(foo ${SRCS})

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值