假设这种简化的目录结构:
+-- DependentLibA
| +-- CMakeLists.txt
+-- DependentLibB
| +-- CMakeLists.txt
+-- Exeuctable
| +-- CMakeLists.txt
+-- CMakeLists.txt
DependentLibA / CMakeLists.txt:
add_library(libA STATIC ${SRCS})
DependentLibB / CMakeLists.txt:
add_library(libB STATIC ${SRCS})
Exeuctable / CMakeLists.txt:
add_executable(mainexe ${SRCS})
target_link_libraries(mainexe PUBLIC
libA
libB
)
CMakeLists.txt:
add_subdirectory(DependentLibA)
add_subdirectory(DependentLibB)
add_subdirectory(Executable)
以上文件假定设置了其他不重要的设置。
如果从root /目录执行make clean && make
,则一切正常。然后,如果我cd DependentLibA && make clean
会正确清理该目录,包括删除libliba.a
文件。
但是,如果我回到root /目录并执行make
,则什么也没有发生,因为它已经认为一切都完成了。我希望“ Executable”项目取决于现有的libliba.a
文件,但它似乎无法正常工作。我认为target_link_libraries()
命令将建立在该依赖关系中。我是否需要更改链接库的方式?还是我需要添加其他命令?
CMake 2.8.10或更高版本是可以的。