cmake报错: /usr/bin/ld: cannot open output file .: 是一个目录

问题描述和分析

根目录CMakeLists.txt里,使用了 add_subdirectory():

add_subdirectory(sdk) # 添加库
add_subdirectory(testbed) # 添加可执行文件

其中 testbed 目录里也有一个 CMakeListst.txt 内容为

add_executable(testbed main.cpp)

在执行 cmake configure 时不会报错,在cmake build时会报错:

cmake -S . -B build
cmake --build build # 报错

报错原因是生成的可执行文件名字是 testbed , 不带后缀(我在Linux上), 而子目录名字也是 testbed. 可执行文件和目录同名,链接器 ld 无法区分它们

换言之, 已经存在了 build/testbed 目录,里面是 CMakeFiles 子目录、 Makfile 文件等。 此时链接器 ld 是希望生成 build/testbed这一可执行文件。 这就冲突了。

解决思路: 消除冲突。

解决方法

最简单的做法是把 build/testbed 目录,改为其他名字。怎么改呢? add_subdirectory( ) 指定第二个参数即可:

# add_subdirectory(testbed) # old
add_subdirectory(testbed testbed.output) # new
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值