我为每个州创建软件。有一些特定于州的代码,以及一些在所有状态下运行的公共代码。 我创建了以下目录结构:
common
foo
CMakeLists.txt
bar
CMakeLists.txt
State
AL
bin
src
build
CMakeLists.txt
DMV
CMakeLists.txt
ABC
CMakeLists.txt
AK
bin
src
build
CMakeLists.txt
DMV
CMakeLists.txt
ABC
CMakeLists.txt
每个州的CMakeList.txt
set (COMMON "/home/me/common")
add_subdirectory(${COMMON}/foo {STATE_BIN_DIR})
add_subdirectory(${COMMON}/bar {STATE_BIN_DIR})
add_subdirectory(${DMV)
DMV目录(和ABC)中的CMakeLists.txt
install(TARGETS dmv DESTINATION ${STATE_BIN_DIR})
Common foo目录(和栏)中的CMakeLists.txt
install(TARGETS foo DESTINATION ${STATE_BIN_DIR})
cmake错误:
The binary directory
/home/me/State/AL/bin is already used to build a source directory. It cannot be used to build source directory
/home/me/common/bar
Specify a unique binary directory name.
如果我只构建foo,它可以正常工作。当我尝试在目录结构之外构建bar时,它会失败。 我不明白的是我的所有二进制文件(状态和公共)都将进入State的bin目录。
阅读本文: CMAKE add sub-directory which is not sub-directory on real directory
它说“CMake不能将两个不同的源目录映射到同一个构建目录。”
但所有不同的来源(DMV,ABC)都进入了垃圾箱。它在这里工作。
CMake的网站没有指定 https://cmake.org/cmake/help/v3.0/command/add_subdirectory.html
有什么工作要做我想要的吗?
我知道我可以在States目录下创建foo和bar drirectory,只需放一个指向共同代码的CMakeLisist.txt。
这样可行。但我想保留配方代码。
我想我也可以创建bin / foo和bin / bar来放置这些二进制文件。 但有些是我想在一个地方共享的库。
有什么想法吗?
由于
答案 0 :(得分:0)
我通过在二进制目录中添加一个额外的子文件夹解决了这个问题。它似乎没有导致我的构建出现任何问题,并且我已经加倍检查了最终构建输出(在我的情况下是一个APK),如果所有二进制文件都包含在内并且确实存在。
在您的情况下,只需使用add_subdirectory()
:
add_subdirectory(${COMMON}/foo {STATE_BIN_DIR}/foo)
add_subdirectory(${COMMON}/bar {STATE_BIN_DIR}/bar)
...
此处可以找到类似的解决方案:link