我为每个州创建软件。有一些特定于状态的代码,以及一些在所有状态上运行的通用代码。 我创建了以下目录结构:
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 目录(和 bar)中的 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 时,它失败了。 我不明白的是我的所有二进制文件(状态和公共)都将进入状态的 bin 目录。
它说“CMake 不能将两个不同的源目录映射到同一个构建目录。”
但所有不同来源(DMV、ABC)都进入垃圾箱。在这里有效。
CMake 的网站没有指定 https://cmake.org/cmake/help/v3.0/command/add_subdirectory.html
有什么办法可以做我想做的事吗?
我知道我可以在 States 目录下创建 foo 和 bar 目录,然后放置一个指向公共代码的 CMakeLisist.txt 。
这样可行。但我想保留食谱和代码。
我想我也可以创建 bin/foo 和 bin/bar 来放入这些二进制文件。 但有些是共享库,我希望将它们放在一个地方。
有什么想法吗?
谢谢
我通过在二进制目录中添加一个额外的子文件夹解决了这个问题。它似乎不会对我的构建造成任何问题,并且我已经仔细检查了最终的构建输出(在我的例子中是一个 APK)是否包含所有二进制文件并且确实如此。
在您的情况下,只需使用
add_subdirectory()
即可:
add_subdirectory(${COMMON}/foo {STATE_BIN_DIR}/foo)
add_subdirectory(${COMMON}/bar {STATE_BIN_DIR}/bar)
...
可以在这里找到类似的解决方案,详细说明如下:link