我是CMAKE的初学者.下面是一个简单的cmake文件,适用于mingw环境窗口.问题显然target_link_libraries()
是CMAKE的功能,我链接libwsock32.a.在Windows中这是有效的,我得到了结果.
但是,正如预期的那样,在Linux中,/usr/bin/ld
将寻找-lwsock32
Linux操作系统中不存在的内容.
我的问题是:我如何指示CMAKE避免在Linux OS中链接wsock32库?
任何帮助将不胜感激.
我的简单CMake文件:
PROJECT(biourl)
set (${PROJECT_NAME}_headers ./BioSocketAddress.h ./BioSocketBase.h ./BioSocketBuffer.h ./BioSocketCommon.h ./BioSocketListener.h ./BioSocketPrivate.h ./BioSocketStream.h ./BioUrl.h BioDatabase.h )
set (${PROJECT_NAME}_sources BioSocketAddress.C BioSocketBase.C BioSocketCommon.C BioSocketStream.C BioUrl.C BioDatabase.C )
add_library(${PROJECT_NAME} STATIC ${${PROJECT_NAME}_headers} ${${PROJECT_NAME}_sources} )
# linkers
#find_library(ws NAMES wsock32 PATHS ${PROJECT_SOURCE_DIR} NO_SYSTEM_ENVIRONMENT_PATH NO_DEFAULT_PATH)
target_link_libraries(${PROJECT_NAME} bioutils wsock32)
install (TARGETS ${PROJECT_NAME}
RUNTIME DESTINATION bin
LIBRARY DESTINATION lib
ARCHIVE DESTINATION lib/archive )
Run Code Online (Sandbox Code Playgroud) 我配置了MinGW和distutils所以现在我可以使用这个命令编译扩展:
setup.py install
Run Code Online (Sandbox Code Playgroud)
将使用MinGW的gcc编译器并安装包.为此,我安装了MinGW并创建了distutils.cfg文件,其中包含以下内容:
[build]
compiler = mingw32
Run Code Online (Sandbox Code Playgroud)
这很酷,但现在我想使用所有的点数好处.有没有办法在pip中使用相同的MinGW的gcc编译器?这样当我运行时:
pip install <package name>
Run Code Online (Sandbox Code Playgroud)
如果需要,pip将使用MinGW的gcc编译器并编译C代码?
目前我收到此错误:Unable to find vcvarsall.bat
.似乎pip并不知道我有gcc编译器.如何配置pip使用gcc编译器?
我目前正在尝试让CMake在我的Windows 7(64位)系统上运行.我想编译TagLib以便以后使用我正在处理的Qt应用程序.我想用MinGW编译它(不是像其他问题那样用Visual C++编译).
我下载安装程序(cmake-2.8.3-win32-x86.exe)并安装它(我也选择将CMake添加到我的路径中).然后我转到CMakeLists.txt文件的目录并运行cmake .
.然后它给了我这个巨大的错误.
C:\Users\Joel\Downloads\taglib-1.6.3>cmake .
CMake Warning at CMakeLists.txt:1 (project):
To use the NMake generator, cmake must be run from a shell that can use the
compiler cl from the command line. This environment does not contain
INCLUDE, LIB, or LIBPATH, and these must be set for the cl compiler to
work.
-- The C compiler identification is unknown
-- The CXX compiler identification is unknown
CMake Warning at C:/Program Files (x86)/CMake …
Run Code Online (Sandbox Code Playgroud) 我得到了"未知类型名称'uint8_t'",其他人喜欢在MinGW中使用C语言.任何想法如何解决这个问题?
我已经用Cmake到达了绳子的尽头; 它有很大的潜力,但我似乎无法让它找到基本的系统工具(即"制造")才能发挥作用.
Cmake和Cmake GUI生成以下内容(删除CMakeCache.txt文件后):
Processing top-level CMakelists.txt for project swb
CMake Error: CMake was unable to find a build program corresponding to "MinGW Makefiles".
CMAKE_MAKE_PROGRAM is not set. You probably need to select a different build tool.
Run Code Online (Sandbox Code Playgroud)
我正专注于在这个问题中找到"make",但是,我也遇到了很多相同的问题,CMake无法找到库和其他实用程序文件(链接器,nm,ar等).我在下面列出的技术似乎使CMake能够在Linux下运行时找到这些文件.
Windows 7(64位); MinGW的多个版本(32位/ 64位); Cmake 2.8.4; NONSTANDARD为MinGW安装位置(c:/ MinGW-32).
1)CMakelists.txt在文件的前10行中包含"SET(CMAKE_MAKE_PROGRAM c:/MinGW-32/bin/make.exe FORCE)".
2)以前版本的CMakelists.txt包含:
find_program(CMAKE_MAKE_PROGRAM
NAMES make
make.exe
DOC "Find a suitable make program for building under Windows/MinGW"
HINTS c:/MinGW-32/bin )
Run Code Online (Sandbox Code Playgroud)
3)在运行CMake或CMake-GUI之前,在cmd.exe环境变量中设置CMAKE_MAKE_PROGRAM.
4)使用标识CMAKE_MAKE_PROGRAM以及CMAKE_C_COMPILER等的"工具链"文件.
如果我使用GUI填充CMAKE_MAKE_PROGRAM变量("C:/MinGW-32/bin/make.exe"),CMake将成功创建构建文件.
如果我通过GUI识别make程序的名称,我可以让CMake工作.如何让CMake无需用户干预Windows 7(64位)/ MinGW组合即可找到我的make程序?
我习惯在Ubuntu之前从源代码手动安装GCC,这是一个痛苦的过程.所以我真的不想重复这个过程.目前,我的机器上安装了MinGW和GCC(4.6.2).那么有没有一种简单的方法来更新GCC而不是完全从源代码构建它?有人做过之前可以分享一些提示吗?
我和这个答案的印象相同,size_t
标准总是保证足够大以容纳给定系统的最大可能类型.
但是,此代码无法在gcc/Mingw上编译:
#include <stdint.h>
#include <stddef.h>
typedef uint8_t array_t [SIZE_MAX];
Run Code Online (Sandbox Code Playgroud)
错误:数组'array_t'的大小太大
我在这里误解了标准中的某些内容吗?被size_t
允许为给定的实现是否过大?或者这是Mingw的另一个错误?
编辑:进一步的研究表明
typedef uint8_t array_t [SIZE_MAX/2]; // does compile
typedef uint8_t array_t [SIZE_MAX/2+1]; // does not compile
Run Code Online (Sandbox Code Playgroud)
这恰好是相同的
#include <limits.h>
typedef uint8_t array_t [LLONG_MAX]; // does compile
typedef uint8_t array_t [LLONG_MAX+(size_t)1]; // does not compile
Run Code Online (Sandbox Code Playgroud)
所以我现在倾向于认为这是Mingw中的一个错误,因为根据有符号整数类型设置最大允许大小没有任何意义.
我最近在我的64位Windows 7计算机上安装了MinGW,当我尝试编译最基本的c ++程序时,例如
#include<iostream>
using namespace std;
int main()
{
cout << "Hello World" << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我收到错误"程序无法启动,因为您的计算机缺少libgmp-10.dll."
在Windows上,我使用CodeSourcery的交叉编译器套件为ARM/Linux交叉编译程序.我使用MinGW MSYS作为我的命令解释器,并且经常会破坏我的路径和路径名.例如,为了构建我的程序,我调用了
arm-none-linux-gnueabi-gcc.exe -Wall -g \
-Wl,--dynamic-linker=/usr/lib/myrpath/ld-linux.so.3 \
-Wl,-rpath=/usr/lib/myrpath \
-I../targetsysroot/usr/include \
myprogram.c -o myprogram
Run Code Online (Sandbox Code Playgroud)
当然,我想/usr/lib/myrpath
逐字插入myprogram
可执行文件 - 我正在编译的ARM Linux目标不使用MinGW或MSYS.但是这里最终会涉及到它:
...
0x0000000f (RPATH) Library rpath: [C:/MinGW/msys/1.0/lib/myrpath]
...
Run Code Online (Sandbox Code Playgroud)
不完全是我想要的.如果我直接在cmd.exe命令行上调用GCC,我会在可执行文件中获得正确的rpath.如果我在MSYS命令行上调用GCC,我会得到损坏的rpath.如果我使用从cmd.exe命令行使用make运行的Makefile调用GCC,我仍然会得到一个受损的rpath(!)
我有什么想法可以关闭这种烦人的行为?