CMake提供了几种指定目标源文件的方法.一种是使用globbing(文档),例如:
FILE(GLOB MY_SRCS dir/*)
Run Code Online (Sandbox Code Playgroud)
另一个是单独指定每个文件.
哪种方式更喜欢?Globbing似乎很容易,但我听说它有一些缺点.
我想在目录下找到所有.c文件,并将它们全部添加到SRC文件以在cmake中编译.我怎么能在CMakeList.txt中这样做.
对于我可以创建的常规makefile
SPECIFIED_SRC_FILE = $(foreach d,$(SPECIFIED_SRC_DIRS),$(wildcard $(addprefix $(d)/*,*.c)))
Run Code Online (Sandbox Code Playgroud)
但是我无法在CMakeList.txt中做到这样的事情.
在Xcode中,有没有办法指定文件夹中的所有文件都是由目标编译的.例如.'Test'目标自动编译'Tests'文件夹中的所有文件,而'App'目标编译'Sources'文件夹中的所有内容.
今天,我这样做的方法是每次创建一个文件到目标.由于文件已经组织在正确的文件夹中,因此感觉有点容易出错和冗余.
谢谢.
我正在尝试将现有的源文件添加到我的Clion项目中,但在将它们添加(复制并粘贴)到项目后,这些文件未添加到CMakeLists文件中.此外,该文件夹是半透明的(灰色).
如何自动将新文件添加到CMakeList?
我刚看过这个:
答案表明文件为glob,例如:
file(GLOB "*.h" "*.cpp")
Run Code Online (Sandbox Code Playgroud)
现在,如果我希望我的目标依赖于特定文件夹下某种类型的所有文件 - 可能在多个子文件夹中,该怎么办?我试过用
execute_process(COMMAND find src/baz/ -name "*.cpp" OUTPUT_VARIABLE BAR)
Run Code Online (Sandbox Code Playgroud)
然后
add_executable(foo ${BAR}
Run Code Online (Sandbox Code Playgroud)
但这给了我错误:
找不到源文件:
src/baz/some/file/here
src/baz/some/other_file/here
src/baz/some/other_file/here2
Run Code Online (Sandbox Code Playgroud)
(是的,有那个间距.)
我在这做错了什么?
在我的项目中,我使用的是cpp和.h文件,它们都在不同的文件夹中
|-src
|-main
|-java
|-cpp
|-native-lib.cpp
|-library-1
|-include
|-lib11.h
|-lib12.h
|-...
|-library-2
|-include
|-lib21.h
|-lib22.h
|-...
Run Code Online (Sandbox Code Playgroud)
在当前版本中我将每个文件添加到 'CMakeLists.txt'
...
add_library(# Sets the name of the library.
native-lib
# Sets the library as a shared library.
SHARED
# Provides a relative path to your source file(s).
src/main/cpp/native-lib.cpp
src/main/cpp/library-1/include/lib10.h
src/main/cpp/library-1/include/lib11.h
src/main/cpp/library-1/include/lib12.h
src/main/cpp/library-1/include/lib13.h
...
src/main/cpp/library-2/include/lib21.h
src/main/cpp/library-2/include/lib22.h
src/main/cpp/library-2/include/lib23.h
...
)
...
Run Code Online (Sandbox Code Playgroud)
我尝试添加如下
...
add_library(# Sets the name of the library.
native-lib
# Sets the library as a shared library.
SHARED
# Provides a relative …Run Code Online (Sandbox Code Playgroud) 我正在使用cmake在C++中构建我的项目.假设我的Source文件夹中有以下目录
Source
|_Dir1
| |_Class.cpp
| |_Class.hpp
|
|_Dir2
|_Main.cpp
Run Code Online (Sandbox Code Playgroud)
在Dir1中有一个包含其头文件和实现文件的类(Class.cpp和Class.hpp).
在Dir2中,主要的应用程序在Dir1中使用该类
告诉Dir2中的CMakeLists使用Dir1/Class.cpp文件构建可执行文件的好方法是什么?
编辑:更具体地说,我想定义Class.cpp的源文件必须在Dir1的CMakeLists.txt中使用,而不是在Dir2中.以另一种方式这样做对我来说是完全错误的并且很难使用,所以如果有理由他们强迫我这样做,那么对这个主题的一些澄清就会很好.
我目前正在做的是对Dir2/CMakeLists.txt中的Class.cpp文件位置进行硬编码,但是当我有一堆类在一起进行交互时,这只是不扩展.