我正在尝试在 Linux Mint 15 上安装 Geant4 10.00。我在我创建的目录中有解压的 geant4 文件 geant4.10.00.p01:
/home/mickmau5/Geant4
以及所需的构建文件geant4.10.00-build。该站点完成安装过程http://goo.gl/nzxpQG。我在冗长的 cmake 命令部分并收到此错误
mickmau5@linuxmint ~/Geant4/geant4.10.00-build $ cmake -DCMAKE_INSTALL_PREFIX=/home/mickmau5/Geant4/geant4.10.00.p01-install /home/mickmau5/Geant4/geant4.10.00.p01
CMake Error at /usr/share/cmake-2.8/Modules/FindPackageHandleStandardArgs.cmake:97 (message):
Could NOT find EXPAT (missing: EXPAT_LIBRARY EXPAT_INCLUDE_DIR)
Call Stack (most recent call first):
/usr/share/cmake-2.8/Modules/FindPackageHandleStandardArgs.cmake:291 (_FPHSA_FAILURE_MESSAGE)
/usr/share/cmake-2.8/Modules/FindEXPAT.cmake:50 (FIND_PACKAGE_HANDLE_STANDARD_ARGS)
cmake/Modules/Geant4OptionalComponents.cmake:71 (find_package)
CMakeLists.txt:78 (include)
-- Configuring incomplete, errors occurred!
Run Code Online (Sandbox Code Playgroud)
看来我应该下载一些东西了。
谢谢你的帮助!
我试图用Windows下的clang-cl编译一个C++ 11程序.Clang-cl是clang的包装器,与cl(Visual Studio编译器)更兼容.我尝试添加-std=c++11和/std=c++11无一不遭到拒绝.这并不奇怪,因为cl没有C++ 11标志.但我不能使用clang-cl的C++ 11功能.
如何在clang-cl中启用C++ 11支持?
Doxygen 没有在此类中添加我的任何成员函数的文档:
#ifndef SET_H_
#define SET_H_
/** @file */
/**
* A mathematical set
*/
class Set
{
virtual ~Set();
/**
* The countability of this set
* @returns Whether this set is a countable one or not.
*/
virtual bool isCountable();
...
}
#endif /* SET_H_ */
Run Code Online (Sandbox Code Playgroud)
它可以很好地生成类文档,但即使我设置EXTRACT_ALL为 YES,也不会生成函数文档。你知道为什么会这样吗?
我已经安装了CMake和cmake.exe C:\Program Files (x86)\CMake\bin
但是当我运行call cmake %CMAKE_BUILD_OPTIONS%bat文件时,我收到一条错误消息
'cmake'不被识别为内部或外部命令,可操作程序或批处理文件.
我应该在环境变量中设置此路径吗?
目标 我想定义几个目标:
并能够轻松地在它们之间切换.例如,我不希望每次切换重建我的所有对象,(我将不得不在第一次这样做,但后来如果我修改文件,我做了然后制作asan它应该只重新编译这个文件对于每个目标)
到目前为止我做了什么
我已经设法从根目录创建这些目标,但每次我必须做一个make clean并重新编译.
option(CLANG_MSAN "Enable Clang memory sanitizer" OFF)
if (CLANG_MSAN)
set (CMAKE_CXX_FLAGS "-g -fsanitize=address -fno-omit-frame-pointer")
endif()
add_custom_target(asan
COMMAND ${CMAKE_COMMAND}
-DCLANG_MSAN=ON
-DCMAKE_CXX_COMPILER=clang++
-DCMAKE_C_COMPILER=clang)
Run Code Online (Sandbox Code Playgroud)
是否有可能用CMake做这样的事情?
我在尝试做一些看似微不足道的事情时遇到了很多麻烦。我想在 docker 容器中安装一些库以在我的项目中使用(将其视为任何其他 VM),但使用主机内的 IDE 实际针对它进行开发。
在这种情况下,直接依赖有些作用,但它们的常见对应项(如 boost 等)缺少 IDE 中的头文件,因此即使程序编译,我也会在 IDE 中遇到一堆错误和缺少头文件。
这是在项目中使用 nghttp2 作为依赖项的示例 CMake 文件:
cmake_minimum_required(VERSION 3.2)
project(deptest)
set(CMAKE_CXX_STANDARD 11)
################ hidapi
set(NGHTTP2_ROOT ${CMAKE_BINARY_DIR}/vendor/nghttp2)
set(NGHTTP2_LIB_DIR ${NGHTTP2_ROOT}/bin/lib)
set(NGHTTP2_INCLUDE_DIR ${NGHTTP2_ROOT}/bin/include)
include(ExternalProject)
ExternalProject_Add(nghttp2_dep
PREFIX ${NGHTTP2_ROOT}
GIT_REPOSITORY "https://github.com/nghttp2/nghttp2.git"
GIT_TAG "0641d314a62fc2f9ede5cbb487895236da4ae4f4"
UPDATE_COMMAND ""
PATCH_COMMAND ""
BINARY_DIR ${NGHTTP2_ROOT}/src/nghttp2
SOURCE_DIR ${NGHTTP2_ROOT}/src/nghttp2
INSTALL_DIR ${NGHTTP2_ROOT}/bin
CONFIGURE_COMMAND ./configure --prefix=<INSTALL_DIR> --enable-asio-lib
BUILD_COMMAND make
BUILD_BYPRODUCTS ${HIDAPI_LIB_DIR}/libnghttp2.a)
# hidapi requires an initial execution of "./bootstrap" to run autoreconf
ExternalProject_Add_Step(nghttp2_dep
bootstrap
COMMAND autoreconf -i && automake && autoconf
DEPENDEES download
DEPENDERS …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用mac上的cmake编译测试类.当我运行cmake和make命令时,我最终得到了这个错误:
duplicate symbol _main in:
CMakeFiles/Carm.dir/CMakeFiles/3.7.0/CompilerIdCXX/CMakeCXXCompilerId.cpp.o
CMakeFiles/Carm.dir/test.cpp.o
ld: 1 duplicate symbol for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [Carm] Error 1
make[1]: *** [CMakeFiles/Carm.dir/all] Error 2
make: *** [all] Error 2
Run Code Online (Sandbox Code Playgroud)
告诉我在main中有一个重复的符号.当我单独使用g ++时,这段代码可以完美编译.
car.h
#ifndef CAR_H
#define CAR_H
#include <string>
using namespace std;
namespace test {
class Car {
private:
string model;
int hp;
int speed;
public:
Car(string n_model, int n_hp);
string getModel();
int getHp();
int getSpeed();
}; …Run Code Online (Sandbox Code Playgroud) 考虑以下 a 的示例FindXXX.cmake:
find_path(XXX_INCLUDE_DIR NAMES XXX/XXX.h)
find_path(XXXYYY_INCLUDE_DIR NAMES YYY.h)
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(XXX DEFAULT_MSG
XXX_INCLUDE_DIR XXXYYY_INCLUDE_DIR)
set(XXX_INCLUDE_DIRS "${XXX_INCLUDE_DIR} ${XXXYYY_INCLUDE_DIR}")
Run Code Online (Sandbox Code Playgroud)
正如本例中所示,XXX_INCLUDE_DIRS是一个中间有空格的字符串,因此,当添加到CMakeLists.txtusing中时
target_include_directories(a PRIVATE ${XXX_INCLUDE_DIRS})
Run Code Online (Sandbox Code Playgroud)
它被编译器调用为
-I"XXXpath XXXYYYpath"
Run Code Online (Sandbox Code Playgroud)
我应该如何修改该行
set(XXX_INCLUDE_DIRS ${XXX_INCLUDE_DIR} ${XXXYYY_INCLUDE_DIR})
Run Code Online (Sandbox Code Playgroud)
它设置变量的值XXX_INCLUDE_DIRS?
. 中的多个库路径也会出现同样的问题XXX_LIBRARIES。
我正在尝试使用clang ++在OS X 10.7下编译VCMI.
我配置项目是CXX=clang++因为Apple的gcc似乎没有识别所需的-std=c++0x标志.
我添加-stdlib=libc++了CXXFLAGS因为没有那个铿锵甚至找不到#include <array>.
目前我有: CXXFLAGS= -std=c++0x -stdlib=libc++ -Wall -Wextra -Wcast-align -Wpointer-arith -Wno-switch -Wno-sign-compare -Wno-unused-parameter -Wc++11-extensions
问题是我得到以下错误:
clang: warning: treating 'c-header' input as 'c++-header' when in C++ mode, this behavior is deprecated
clang: warning: argument unused during compilation: '-ggdb'
StdInc.h:1:9: warning: #pragma once in main file
#pragma once
^
In file included from StdInc.h:3:
In file included from ./../Global.h:32:
In file included from /usr/bin/../lib/c++/v1/algorithm:594:
In …Run Code Online (Sandbox Code Playgroud) 是否可以使用CMake(或其他构建自动化实用程序)生成Visual C++项目,该项目使用除 cl.exe 之外的C++编译器?理想情况下,它可以找到相关的兼容C++标准库; 并允许步骤调试; 但是一步一步:如果它甚至可以编译一个空main函数,那将是一个好的开始.