CMake子目录依赖项

问题描述:

我对CMake很新。事实上,我正在通过Kdevelop4 widh C++来尝试它。CMake子目录依赖项

我有习惯为我创建的每个名称空间创建子目录,即使所有源都必须编译并链接到一个可执行文件中。那么,当我在kdevelop下创建一个目录时,它会使用add_subdirectory命令更新CMakeLists.txt,并在其下创建一个新的CMakeLists.txt,但这不会将其下的源添加到编译列表中。

我有根的CMakeLists.txt如下:

 

project(gear2d) 

add_executable(gear2d object.cc main.cc) 

add_subdirectory(component) 

在部件/ I有欲被编译和链接,以产生可执行gear2d来源。我怎么能做到这一点?

CMake FAQ有this入口,但如果这是答案,我宁愿留在普通的Makefiles。

有没有办法做到这一点?

添加一个子目录不仅仅是指定CMake它应该进入目录并在那里寻找另一个CMakeLists.txt。您仍然需要创建一个带有add_library源文件的库,并将其链接到target_link_libraries的可执行文件。像下面这样:

在子目录的CMakeLists.txt

set(component_SOURCES ...) # Add the source-files for the component here 
# Optionally you can use file glob (uncomment the next line) 
# file(GLOB component_SOURCES *.cpp)below 

add_library(component ${component_SOURCES}) 

*目录的CMakeLists.txt

project(gear2d) 
add_subdirectory(component) 
add_executable(gear2d object.cc main.cc) 
target_link_libraries(gear2d component) 
+0

这做到了!非常感谢。对于库的含义,我还有其他的概念,实际上我期待的就是在子目录CMakeListrs.txt中添加源代码,就像在根目录中添加源代码一样,使用add_executable。再次感谢。 – Leonardo 2011-04-13 07:26:57

+0

这基本上增加了一个新的(库)目标。即使这个目标没有链接到本身,问题可能会在稍后出现时设置的标志或其他东西... 更好的答案在这里:http://*.com/questions/8934295/add-source-in -a-subdirectory-to-a-cmake-project – kralyk 2012-04-28 11:48:46

+0

@kralyk:我同意新的图书馆目标。为了方便,我浏览了“链接到一个单一的可执行文件”,只是想暗示另一种通过目录和库分发源文件的方法。 – 2012-05-02 06:53:03