问题描述和分析
根目录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