我需要为i486架构编译OpenCV.我想将优化标志设置为O3.问题是无法找到在cmake文件中或使用配置脚本设置编译器标志的方法.
我正在构建一个包含cuda代码的cmake项目.我无法编译其中一个包含几个h文件的cuda文件.这是我收到的编译器错误
In file included from /usr/include/c++/4.4/bits/basic_ios.h:39,
from /usr/include/c++/4.4/ios:45,
from /usr/include/c++/4.4/ostream:40,
from /usr/include/c++/4.4/iostream:40,
from /home/pfeifs/Developement/Deform/LinuxDeform/LibDeform/Deform/cutil_comfunc.h:20,
from /home/pfeifs/Developement/Deform/LinuxDeform/LibDeform/Deform/VectorMathDef.h:22,
from /home/pfeifs/Developement/Deform/LinuxDeform/LibDeform/src/Deform/VectorMath.cu:15:
/usr/include/c++/4.4/bits/locale_facets.h:2521:44: error: macro "isspace" passed 2 arguments, but takes just 1
Run Code Online (Sandbox Code Playgroud)
isspace()被定义为需要一个参数<ctype.h>并在其中声明为模板化函数的宏locale_facets.h.(这些都是标准文件.)但是在开始时locale_facets.h,<cctype>包括并且取消 声明宏.
非常感谢对此问题的任何帮助或见解.
我用c ++编写了一个代码.我试着在Kdevelop中使用CMake.
我的头文件Newtime.h
class NewTime
{
public:
NewTime(int = 0, int = 0, int = 0); //constructor
void setTime(int, int, int); // set time
void dispTime(); //print time
private:
int hour;
int minute;
int second;
};
Run Code Online (Sandbox Code Playgroud)
对于NewTime.cpp,我在下面写道:
#include <iostream>
#include <stdio.h>
#include "NewTime.h"
//
NewTime::NewTime(int hr, int min, int sec)
{
setTime(hr, min, sec);
}
//
void NewTime::setTime(int h, int m, int s)
{
hour = ((h >= 0 && h < 24) ? h : 0);
minute = ((m …Run Code Online (Sandbox Code Playgroud) 我正在尝试编译第三方库,以便在Windows 7上的Visual Studio 2005 Express中使用.
我有无尽的错误信息,我现在不会讨论.
我真正的问题是 - 如果必须编译c ++库,并且可以从该编译库中编译c ++可执行文件 - 为什么需要两个编译步骤?当然,为类等提供C++代码更容易,因为某些.txt是由我们自行决定编译的?对于我的非计算机科学家教育来说,整个c-make惨败似乎是完成任何事情的不必要障碍.
此业务也与链接和编译.将所有目录手动设置为各种依赖项而不是依赖于环境变量等会不会更容易?由于我没有管理员权限,所有这些似乎是另一个不必要的负担?
我使用CMake在Windows,OSX和Linux上生成生成文件(makefile或项目文件),并使用这些平台的本机C和C ++编译器。在Windows I gnerate VS 2010项目上,在Release配置中,发生以下错误:
命令行错误D8016:'/ ZI'和'/ Ob2'命令行选项不兼容
显然,CMake会生成不兼容的优化和调试信息选项。这是默认的CMake配置,我没有设置任何特殊标志。
我通过在Visual Studio的项目选项中将/ ZI更改为/ Z7来解决此问题,但这使设置连续集成系统很烦人-我需要添加脚本来修改项目文件。
我可以强制CMake替代/ ZI来/ Z7(与C7兼容的调试信息)吗?
另外,如何使它仅在Release配置中而不在Debug中生成?
跟随qt和cmake的一些hello world,这是我的折叠结构:
CMakeLists.txt
main.cpp
ui/mainwindow.ui
src/mainwindow.cpp
include/mainwindow.h
Run Code Online (Sandbox Code Playgroud)
这是CMakeList.txt:
cmake_minimum_required (VERSION 2.8)
# Project
set(PROJECTNAME "Hello")
project(${PROJECTNAME} C CXX)
set(${PROJECTNAME}_MAJOR_VERSION 0)
set(${PROJECTNAME}_MINOR_VERSION 1)
# qt
find_package(Qt4 REQUIRED)
set (QT_USE_QTMAIN TRUE)
include (${QT_USE_FILE})
add_definitions(${QT_DEFINITIONS})
# compilers
#set(CMAKE_CXX_FLAGS "-Wall -std=gnu++0x")
# files
include_directories(${CMAKE_CURRENT_BINARY_DIR})
include_directories(src)
include_directories(include)
set(${PROJECTNAME}_SOURCES
main.cpp
src/mainwindow.cpp
)
set(${PROJECTNAME}_HEADERS
include/mainwindow.h
)
set(${PROJECTNAME}_HEADERS_MOC
include/mainwindow.h
)
set(${PROJECTNAME}_FORMS
ui/mainwindow.ui
)
QT4_WRAP_CPP(${PROJECTNAME}_HEADERS_MOC ${${PROJECTNAME}_HEADERS_MOC})
QT4_WRAP_UI(${PROJECTNAME}_FORMS_HEADERS ${${PROJECTNAME}_FORMS})
QT4_ADD_RESOURCES(${PROJECTNAME}_RESOURCES_RCC ${${PROJECTNAME}_RESOURCES})
# executables and installation
add_executable (
${${PROJECTNAME}_HEADERS}
${${PROJECTNAME}_SOURCES}
${${PROJECTNAME}_HEADERS_MOC}
${${PROJECTNAME}_FORMS_HEADERS}
)
target_link_libraries(${PROJECTNAME} ${QT_LIBRARIES})
Run Code Online (Sandbox Code Playgroud)
尝试了添加target_link_libraries的不同方法,但仍然得到:
-- The C compiler identification …Run Code Online (Sandbox Code Playgroud) 我可以使用CMake成功构建一个SWIG模块,例如给出一个简单的例子.i:
%module example
Run Code Online (Sandbox Code Playgroud)
并且一个空的example.cxx以下内容足以编译一个空的但工作正常的Python模块:
cmake_minimum_required(VERSION 2.8)
FIND_PACKAGE(SWIG REQUIRED)
INCLUDE(${SWIG_USE_FILE})
FIND_PACKAGE(PythonLibs)
INCLUDE_DIRECTORIES(${PYTHON_INCLUDE_PATH})
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR})
SET(CMAKE_SWIG_FLAGS "-Wall")
SET_SOURCE_FILES_PROPERTIES(example.i PROPERTIES CPLUSPLUS ON)
SET_SOURCE_FILES_PROPERTIES(example.i PROPERTIES SWIG_FLAGS "-builtin")
SWIG_ADD_MODULE(example python example.i example.cxx)
SWIG_LINK_LIBRARIES(example ${PYTHON_LIBRARIES})
Run Code Online (Sandbox Code Playgroud)
如果我想在构建期间调用更多选项到SWIG,那么显而易见的解决方案是更改CMakeLists.txt:
SET_SOURCE_FILES_PROPERTIES(example.i PROPERTIES SWIG_FLAGS "-py3 -builtin -extranative")
Run Code Online (Sandbox Code Playgroud)
但这不起作用,构建现在失败了:
[ 33%] Swig source
swig error : Unrecognized option -py3 -builtin -extranative
Use 'swig -help' for available options.
make[2]: *** [examplePYTHON_wrap.cxx] Error 1
make[1]: *** [CMakeFiles/_example.dir/all] Error 2
make: *** [all] Error 2
Run Code Online (Sandbox Code Playgroud)
And running the build with VERBOSE=99 we can see why:
/usr/bin/swig2.0 …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Gake 4.73上的Ubuntu 13.04上的CMake编译Boost ASIO示例.
使用以下CMake文件:
cmake_minimum_required(VERSION 2.8)
ADD_DEFINITIONS(-std=c++11)
project(server)
find_package( Boost 1.53.0 REQUIRED system)
INCLUDE_DIRECTORIES( ${Boost_INCLUDE_DIR} )
add_executable( server server.cpp )
target_link_libraries(server ${Boost_LIBRARIES} )
add_executable( client client.cpp )
target_link_libraries(client ${Boost_LIBRARIES})
Run Code Online (Sandbox Code Playgroud)
该项目应该使用C++ 11并且与平台无关.使用CMakefile进行编译时,我会得到类似的结果
undefined reference to `pthread_join'
Run Code Online (Sandbox Code Playgroud)
我的同事可以毫无问题地编译完全相同的Makefile.
问题:有没有办法迫使CMake或Boost不使用PThreads但C++ 11 Threads保持平台独立?
编辑:服务器编译没有问题,而只有客户端有问题.
我有一个基于Linux的应用程序,在Ubuntu 12.04 LTS下运行,编译,链接和运行没有问题.
我最近将我的Ubuntu升级到14.04 LTS,并且遇到了编译和链接应用程序的问题.
通过在两个文件中手动修改Boost 1.48的本地副本来解决编译问题(包括/ boost/config/stdlib/libstdcpp3.h pp和include/boost/thread/xtime.hpp).此时应用程序编译成功.
我遇到的问题是链接失败并显示错误消息:
c++: error: unrecognized command line option ‘-Wl’
Run Code Online (Sandbox Code Playgroud)
我使用CMake在多个平台上编译应用程序.这是CMake生成的链接描述文件.请注意,/ usr/bin/c ++现在无法识别"-Wl"选项:
/usr/bin/c++
-fno-stack-protector
-g
-Wl
CMakeFiles/Project.dir/main.cpp.o
CMakeFiles/Project.dir/TestCallback.cpp.o
CMakeFiles/Project.dir/utils.cpp.o
CMakeFiles/Project.dir/Request1.cpp.o
CMakeFiles/Project.dir/Response1.cpp.o
CMakeFiles/Project.dir/TextChatRequest.cpp.o
CMakeFiles/Project.dir/TextChatResponse.cpp.o
-o
/home/user/private/Project/Project_Release_1_2_Codename/Build/bin/Debug/Project
-L/home/user/Libraries/Ubuntu32_12.04/boost_1.48/lib
-L/home/user/Libraries/Ubuntu32_12.04/SqlLite_3.6/lib
-L/home/user/Libraries/Ubuntu32_12.04/taglib_1.7/lib
-L/home/user/Libraries/Ubuntu32_12.04/JSON_1.0/lib/Debug
-L/home/user/private/Project/Project_Release_1_2_Codename/Build/../lib/libUbuntu32/Debug
-rdynamic
/home/user/private/Project/Project_Release_1_2_Codename/lib/libUbuntu32/Debug/libAPI.a
/home/user/private/Project/Project_Release_1_2_Codename/lib/libUbuntu32/Debug/libInternals.a
-lboost_thread
-lboost_system
-lboost_filesystem
-lboost_program_options
-ltaglib
-lJSON
-lpthread
-Wl,-Bstatic
-lsqlite3
-Wl,-Bdynamic
-ldl
-Wl,-rpath,/home/user/Libraries/Ubuntu32_12.04/boost_1.48/lib:/home/user/Libraries/Ubuntu32_12.04/SqlLite_3.6/lib:/home/user/Libraries/Ubuntu32_12.04/taglib_1.7/lib:/home/user/Libraries/Ubuntu32_12.04/JSON_1.0/lib/Debug:/home/user/private/Project/Project_Release_1_2_Codename/Build/../lib/libUbuntu32/Debug
Run Code Online (Sandbox Code Playgroud)
这是我正在使用的软件的版本信息:
Ubuntu:
14.04.1 LTS (trusty)
c++ compiler/linker:
(Ubuntu 4.8.2-19ubuntu1) 4.8.2
CMake:
Version 2.8.12.2
Run Code Online (Sandbox Code Playgroud)
为什么链接器不能识别"-Wl"命令?我升级到14.04 LTS是否修改了链接器软件库?如何备份和链接我的应用程序?
我正在尝试在我的CentOS 6.4上安装OpenCV-2.4.9.机.
我在〜/ Downloads/opencv-2.4.9中下载了源代码.
从那里,我做了'mkdir build; cd build'.然后呢
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_TBB=ON -D BUILD_NEW_PYTHON_SUPPORT=ON -D WITH_V4L=ON -D INSTALL_C_EXAMPLES=ON -D INSTALL_PYTHON_EXAMPLES=ON -D WITH_QT=ON -D WITH_OPENGL=ON --enable-shared ..
并且'做'-j2'.
下面是我收到的消息(这是使用'make'重新运行的结果)
[ 3%] Built target libtiff
[ 4%] Built target opencv_core_pch_dephelp
[ 4%] Built target pch_Generate_opencv_core
[ 6%] Built target opencv_core
[ 6%] Built target opencv_ts_pch_dephelp
[ 6%] Built target pch_Generate_opencv_ts
[ 6%] Built target opencv_imgproc_pch_dephelp
[ 7%] Built target pch_Generate_opencv_imgproc
[ 11%] Built target opencv_imgproc
[ 11%] Built target …Run Code Online (Sandbox Code Playgroud)