Tag: cmake

cmake将中间文件放在某个目录中

我对cmake很新,并想知道如何做到这一点是cmake。 我想将所有中间文件(如.o文件)放在某个目录中(比如说“build”),然后一旦构建完成,我想复制我需要的某些文件(例如.exe ,. dll喜欢最终产品)从build目录到“stage”目录。 如何指定这两个目录(构建和阶段)的路径? Cmake还将检查build / stage目录是否存在。 如果不存在,它将为我创建目录。 任何帮助将不胜感激。

C / cmake – 在TARGET_LINK_LIBRARIES中指定库时,如何向(未使用的)库添加链接器标志?

在我的项目的根目录中,我有一个my_lib的子目录和另一个my_app的子目录。 库my_lib定义了填充链接器定义的部分的表,这些表不是my_app直接使用的,因此该库未链接。 为了强制my_lib被链接,我添加了标志–whole-archive,如下所述。 它的工作原理! 在根目录的CMakelist.txt中,我有以下内容: SET(CMAKE_EXE_LINKER_FLAGS “-mmcu=cc430f6137 -Wl,–gc-sections -Wl,–whole-archive -lMY_LIB -Wl,–no-whole-archive”) ADD_SUBDIRECTORY(my_lib) 在CMakelist.txt的my_lib我有: ADD_LIBRARY(MY_LIB my_lib.c ) TARGET_LINK_LIBRARIES(MY_LIB) 在my_app的CMakelist.txt ,我有: ADD_EXECUTABLE(my_app my_app.c) TARGET_LINK_LIBRARIES(my_app MY_LIB) 我的问题是,如果在my_app CMakelist.txt中的TARGET_LINK_LIBRARIES中指定了CMakelist.txt ,我只想使用此标志( MY_LIB –whole-archive )。 如果最后一行TARGET_LINK_LIBRARIES(my_app MY_LIB)不存在,我不想在”-Wl,–whole-archive -lMY_LIB -Wl,–no-whole-archive”添加”-Wl,–whole-archive -lMY_LIB -Wl,–no-whole-archive” 。 我试图从root中的CMakelist.txt中删除此标志,并将以下内容添加到my_lib子目录中的CMakelist.txt中: SET_TARGET_PROPERTIES(MY_LIB PROPERTIES CMAKE_EXE_LINKER_FLAGS “-Wl,–whole-archive -lMY_LIB -Wl,–no-whole-archive”) 但这不起作用。 我怎样才能做到这一点?

在Android Studio中使用预构建的共享库

我需要在我的android项目中使用自定义的预建共享库(在独立的ndk上构建为libdynamic.so)。 我在路径src / main中创建了一个文件夹“jniLibs”,然后在其中创建了4个文件夹,即“armeabi”“armeabi-v7a”“x86”“x86_64”。 我已将预构建的库放在所有这4个文件夹中。 现在从我的本机代码我想调用这个库的一个函数。 按以下方式(在cmakelists.txt中包含标题): extern “C” JNIEXPORT jstring JNICALL Java_demo_co_ru_jnilibtest_MainActivity_stringFromJNI( JNIEnv *env, jobject /* this */) { float inv = rsqrt(3); //FUNCTION FROM LIBRARY (libdynamic.so) std::string hello = “Hello “; return env->NewStringUTF(hello.c_str()); } 我收到以下错误: Error:error: cannot find -ldynamic Error:(19) undefined reference to ‘rsqrt(float)’ Error:error: linker command failed with exit code 1 (use […]

附加到CMAKE_C_FLAGS

我正在使用CMake进行两个版本的项目,其中一个需要-lglapi而另一个不需要。 到目前为止,我们使用的线条看起来像这样: SET(CMAKE_C_FLAGS “-O3 -xSSE3 -restrict -lpthread -lX11 -ldrm”) SET(CMAKE_CXX_FLAGS “-O3 -xSSE3 -restrict -lpthread -lX11 -ldrm”) 我在我的CMakeList.txt中添加了一个if语句,紧跟在这些行之后: if(SINGLE_MODE) SET(CMAKE_C_FLAGS ${CMAKE_C_FLAGS} ” -lglapi”) SET(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} ” -lglapi”) endif(SINGLE_MODE) SINGLE_MODE变量定义了一点点。 当我使用message命令显示标志变量的内容时,它看起来没问题: -O3 -xSSE3 -restrict -lpthread -lX11 -ldrm -lglapi 但是当我开始编译时,我遇到了编译错误。 使用详细模式我意识到在编译器调用中看起来像: -O3 -xSSE3 -restrict -lpthread -lX11 -ldrm; -lglapi 也就是说,在将-lglapi添加到列表之前添加了分号。 这里有没有人遇到类似的问题,并知道解决这个问题的方法? 我用谷歌搜索了很长一段时间并研究了CMake手册,但看不出我在这里做错了什么。 谢谢,托比亚斯

CMAKE错误项目文件无效; 不包含cmakelists.txt

我试图在64位Windows计算机上编译以下网站的代码.. https://dms.sztaki.hu/en/project/gaussian-mixture-modeling-gmm-es-fisher-vector-toolkit 我收到以下错误: 1)错误配置..项目文件可能无效 2)CMake错误:源目录“/ GMM_Fisher_toolkit / GMM_CUDA_src”似乎不包含CMakeLists.txt。 指定–help用于使用,或按CMake GUI上的帮助按钮。 我怎么编译它?

Cmake – 想要查看中间.i文件

我想知道如何让Cmake给我一个目标,允许我从我的C程序中保存.i文件,并完成宏扩展等。 我是否需要制作自定义目标才能执行此操作?

让编译器找到Cmake创建的文件

我正在使用Cmake中的configure_file命令进行function可用性检查,如本页所述 。 该页面建议使用如下命令: configure_file(config.h.in config.h) 这会将${CMAKE_CURRENT_SOURCE_DIR}/config.h.in为${CMAKE_CURRENT_BINARY_DIR}/config.h 。 但是当我编译程序时,编译器只在${CMAKE_CURRENT_SOURCE_DIR}查找标题(例如config.h ),而不是${CMAKE_CURRENT_BINARY_DIR} 。 很自然地,编译器找不到生成它的config.h ,并且构建失败。 解决此问题的标准方法是什么? 我应该更改CMakeLists.txt以便在源目录config.h创建config.h吗? 或者我应该更改它以将构建目录添加到包含路径? (实际上,为什么我必须手动处理这个问题?[半修辞问题]) 这个问题涉及类似的问题,但建议两种方案作为可能的解决方案; 我想知道是否有一个标准的做法,或者这是否表明我错过了一些关于如何使用Cmake的内容。

如何从CMakeLists.txt生成cscope.files

我正在使用CMake构建我的代码。 CMakeLists.txt包含所有.C或.CPP文件和所有包含目录的列表。 我如何实现CMakeLists.txt,以便我可以为我生成一个make选项,包含所有.C和.CPP(或.CXX)文件的列表以及include目录中的所有.h文件在里面? 例如,我应该能够运行make cscopefiles ,它将为我生成cscope.files。 或者已经有这样的选择吗?

cmake在OS X上找不到gl.h

我在OS X 10.10上尝试用GLUT和OpenGL构建一个C’项目’。 我把它简化为一个展示我的问题的最小例子。 我有以下CMakeLists.txt : cmake_minimum_required(VERSION 2.8) FIND_PACKAGE(OpenGL REQUIRED) FIND_PACKAGE(GLUT REQUIRED) if(OpenGL_FOUND) # never true, but printed as true link_directories(${OpenGL_LIBRARY_DIRS}) include_directories(${OpenGL_INCLUDE_DIR}) endif(OpenGL_FOUND) if(GLUT_FOUND) link_directories(${GLUT_LIBRARY_DIR}) include_directories(${GLUT_INCLUDE_DIR}) endif(GLUT_FOUND) # print all vars because wtf get_cmake_property(_v VARIABLES) foreach(_v ${_v}) message(STATUS “${_v}=${${_v}}”) endforeach() add_executable(main main.c) target_link_libraries(main ${GLUT_LIBRARY} ${OPENGL_LIBRARY}) main.c只是一个虚拟包括两个标题: #include #include int main() { return 0; } 现在, […]

在Windows上进行CMake

我试图在Windows上运行CMake,我收到以下错误: — The C compiler identification is unknown CMake Error at CMakeLists.txt:3 (PROJECT): The CMAKE_C_COMPILER: cl is not a full path and was not found in the PATH. To use the NMake generator with Visual C++, cmake must be run from a shell that can use the compiler cl from the command line. This environment […]