我会开始说我在Cmake问题上几乎完全愚蠢.
我有以下CMakeLists.txtKdevelop 4.1项目:
project(uart)
find_package(KDE4 REQUIRED)
include (KDE4Defaults)
include_directories( ${KDE4_INCLUDES} ${QT_INCLUDES} src/include src/include/QSerialDevce )
add_subdirectory(doc)
add_subdirectory(src)
add_subdirectory(icons)
link_directories(/usr/lib)
find_library(SERIALDEVICE_LIB qserialdeviced)
add_executable(uart ${uart_SRCS})
target_link_libraries(uart ${SERIALDEVICE_LIB})
Run Code Online (Sandbox Code Playgroud)
当我尝试构建我的项目时,我看到:
uart/build> make -j2
-- Found Qt-Version 4.6.3 (using /usr/bin/qmake-qt4)
-- Found X11: /usr/lib64/libX11.so
-- Found KDE 4.5 include dir: /usr/include/kde4
-- Found KDE 4.5 library dir: /usr/lib64/kde4/devel
-- Found the KDE4 kconfig_compiler4 preprocessor: /usr/bin/kconfig_compiler4
-- Found automoc4: /usr/bin/automoc4
CMake Error at CMakeLists.txt:16 (add_executable):
add_executable called with incorrect number of arguments
CMake Error: Attempt …Run Code Online (Sandbox Code Playgroud) 我想知道是否这是一种确定打印小数的最大字符数的简单方法int.
我知道<limits.h>包含了诸如定义INT_MAX是说,最高值 int可以假设,但它不是我想要的.
我希望能够做到这样的事情:
int get_int( void )
{
char draft[ MAX_CHAR_OF_A_DECIMAL_INT ];
fgets( draft, sizeof( draft ), stdin );
return strtol( draft, NULL, 10 );
}
Run Code Online (Sandbox Code Playgroud)
但是如何以MAX_CHAR_OF_A_DECIMAL_INT便携和低调的方式找到价值呢?
谢谢!
请考虑以下代码:
#include <iostream>
using namespace std;
extern "C"
void foo( void );
namespace A
{
template< int No >
class Bar
{
private:
friend void ::foo( void );
static void private_func( int n );
};
template< int No >
void Bar< No >::private_func( int n )
{
cout << "A:Bar< " << No << ">::private_func( " << n << " )" << endl;
}
}
extern "C"
void foo( void )
{
A::Bar< 0 >::private_func( 1 );
}
int main( …Run Code Online (Sandbox Code Playgroud) 请考虑以下代码:
#include <iostream>
#include <typeinfo>
template< typename Type >
void func( Type var )
{
std::cout << __FUNCTION__ << ": var = " << var << " [" << typeid( var ).name( ) << "]." << std::endl;
std::cout << "-> var is SCALAR. Size = " << sizeof( Type ) << std::endl;
}
#if 1
template< typename Type >
void func( Type * var )
{
std::cout << __FUNCTION__ << ": var = " << var << " [" << …Run Code Online (Sandbox Code Playgroud) 我开始道歉,如果我是愚蠢的,如果它是如此明显,找不到答案.
我已经看过几十页讨论指针参数的特定模板专业化.
但是,我希望能够防止模板专门化指针参数,但我无法弄清楚如何做到这一点.
template< class T >
void function( T arg )
{
//...
}
int main( )
{
int i = 42;
function( i ); // Ok
function( &i ); // Die bastart with a compiler error!
}
Run Code Online (Sandbox Code Playgroud)
可能吗?
谢谢.
我在一个Ubuntu盒子里安装了ELDK-3.1,效果很好.
在另一台运行64位OpenSuse 12.1的机器上,我克隆了ELDK安装,并且有一段时间它运行良好.
现在,当我尝试配置我的项目时,我看到:
configure: error: C compiler cannot create executables
See `config.log' for more details
Run Code Online (Sandbox Code Playgroud)
日志显示:
configure:3411: ppc-linux-gcc conftest.c >&5
/opt/ELDK-3.1/usr/bin/../lib/gcc-lib/ppc-linux/3.3.3/../../../../ppc-linux/bin/ld: warning: ld.so.1, needed by /opt/ELDK-3.1//usr/../ppc_8xx/lib/libc.so.6, not found (try using -rpath or -rpath-link)
/opt/ELDK-3.1//usr/../ppc_8xx/lib/libc.so.6: undefined reference to `_dl_lookup_versioned_symbol_skip@GLIBC_PRIVATE'
...
Run Code Online (Sandbox Code Playgroud)
该文件ld.so.1与目录位于同一目录中libc.so.6.
s -l /opt/ELDK-3.1//usr/../ppc_8xx/lib/ld.so.1
lrwxrwxrwx 1 root root 11 Jan 31 11:43 /opt/ELDK-3.1//usr/../ppc_8xx/lib/ld.so.1 -> ld-2.3.1.so
Run Code Online (Sandbox Code Playgroud)
据我所知,我正确地定义了所有需要的环境,并尝试使用与Ubuntu框中完全相同的构建系统构建(项目是"自动化").
所以我写了一个脚本试图模仿我的automaked configure所做的一切:
#!/bin/bash
if [ ! -f confdefs.c ]; then
cat > confdefs.c << EOF
/* confdefs.h */
#define …Run Code Online (Sandbox Code Playgroud) 我有一个产品,使用编译器(gnuarm GCC 4.1.1)编译bootloader和应用程序,生成"arm-elf".
引导加载程序和应用程序在链接描述文件的不同FLASH存储区中分隔.
该应用程序具有一个功能,使其能够调用引导加载程序(作为一个带有2个参数的简单c函数).
我需要能够升级世界各地的现有产品,并且我可以使用始终相同的编译器安全地完成此操作.
现在,我希望能够使用输出arm-eabi的新GCC版本来编译此产品应用程序.
一切都适用于新产品,其中应用程序和引导程序都使用相同的工具链进行编译,但现有产品会发生什么?如果我使用GCC 4.6.x和arm-none-eabi编译一个新的应用程序,我的应用程序是否仍然可以从旧的arm-elf引导程序中调用引导加载程序功能?
此外,与上述问题没有直接关系,我可以将用arm-elf编译的目标文件混合到用arm-eabi编译的二进制文件中吗?
编辑:
我认为很清楚我正在为裸机ARM7构建,如果它有任何区别......
如何automake在我想要的地方安装任意数据文件?
我有一些文件需要放在特定的地方,例如" datafile1",在我的项目中,需要复制到" /usr/MyProduct/flash_memory".
/usr/MyProduct/flash_memory"是一条我无法改变的绝对道路.datafile1"是一个二进制数据文件,不是由"构建" make,而只是需要复制make install.make dist.它需要被复制make install(这是一个很长的解释,因此,pelase只考虑这一点).install-hook,但更喜欢采用更优雅的方法(如果可能的话).真的感谢!
我在LPC1754,59和68 + FreeRTOS + CMSIS 上运行固件.
我希望能够将微控制器置于最低功耗模式,但是:
据我在" LPC17xx用户手册 "(第58,59页)中所读到的,我应该可以从EINT3唤醒到"断电"模式.
我错过了什么?是否在低功率时产生中断?怎么说?我应该做任何特定的东西才能生成它吗?
编辑:
我希望能够传递从DBMetaData另一个类的非类型模板参数继承的对象的引用,DBVar:
#include <iostream>
class DBMetaData
{
public:
virtual const char *description( ) const = 0;
};
class DBMetaData_NT
: public DBMetaData
{
public:
const char *description( ) const
{ return "Useless description."; }
};
#if DO_WHAT_I_WANT
template< const DBMetaData &Metadata >
#else
template< typename MetadataType,
const MetadataType &Metadata >
#endif // DO_WHAT_I_WANT
class DBVar
{
public:
/// Descrição da variavel.
const char *description( ) const
{ return Metadata.description( ); }
};
DBMetaData_NT _md_u1;
#if DO_WHAT_I_WANT
DBVar< …Run Code Online (Sandbox Code Playgroud)